Java 如何定义嵌套类常量?

Java 如何定义嵌套类常量?,java,python,constants,Java,Python,Constants,我在constants.py PERMISSION_USER_ADD = 'add_user' PERMISSION_USER_VIEW = 'view_user' PERMISSION_USER_EDIT = 'edit_user' PERMISSION_TOOL_ADD = 'add_tool' PERMISSION_TOOL_VIEW = 'view_tool' PERMISSION_TOOL_EDIT = 'edit_tool' 但我不希望每次需要添加另一个常量时都必须键入这些完整的常

我在
constants.py

PERMISSION_USER_ADD = 'add_user'
PERMISSION_USER_VIEW = 'view_user'
PERMISSION_USER_EDIT = 'edit_user'
PERMISSION_TOOL_ADD = 'add_tool'
PERMISSION_TOOL_VIEW = 'view_tool'
PERMISSION_TOOL_EDIT = 'edit_tool'
但我不希望每次需要添加另一个常量时都必须键入这些完整的常量名称

来自爪哇,我可以做到这一点

class Permission {
    class User {
        const ADD = 'add_user';
        const VIEW = 'view_user';
        const EDIT = 'edit_user';
    }
    class Tool {
        const ADD = 'add_tool';
        const VIEW = 'view_tool';
        const EDIT = 'edit_tool';
    }
}
但是,所有python linter都将此标记为糟糕的编码实践,并且到目前为止,寻找python实现此目的的方法还没有取得成果


所以我的问题是:以一种支持简单重构的方式定义嵌套常量的pythonic方法是什么?

字典可能是最简单的方法

class Permission(object):
    user = {
        'add': 'add_user',
        'view': 'view_user',
        'edit': 'edit_user',
    }
    tool = {
        'add' : 'add_tool',
        'view' : 'view_tool',
        'edit' : 'edit_tool',
    }

print(Permission.user['view'])
print(Permission.tool['view'])
输出:

view_user
view_tool
您可以使用它访问成员,就像您的类示例一样:

>>> permissions = Namespace(
...     user=Namespace(add='add_user', etc),
...     etc
... )
然后:

>>> permissions.user.add
'add_user' 

一本简单的字典是不会把它删掉的?你不是还需要做
权限.User.ADD
?我看不出你怎么能节省时间。如果您对此感到担心,请缩短常量的名称或将编辑器配置为自动完成。@palivek字典可以工作,但我必须使用
['user']['add']
来访问这些值。不知道那是不是最好的way@PatrickHaugh如果我要添加一个新的权限,我将不得不复制编辑/键入它,而使用嵌套,我只能在一个地方添加它。我也失去了很好地迭代权限的能力。这可能只是我的偏见。