如何定义嵌套类常量?

时间:2018-04-28 17:00:29

标签: 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'

但是每次我需要添加另一个时,我不想输入这些完整的常量名称。

来自Java我可以做到这一点。

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 linters都将此标记为糟糕的编码实践,并且搜索python的方法到目前为止还没有成果。

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

2 个答案:

答案 0 :(得分:1)

您可以使用argparse.Namespace来访问成员,就像您的班级示例一样:

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

然后:

>>> permissions.user.add
'add_user' 

答案 1 :(得分:0)

字典可能是最简单的方法。

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