Как определить вложенные константы класса? - PullRequest
0 голосов
/ 28 апреля 2018

Эти константы определены в 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-линтеры отмечают это как плохую практику кодирования, и поиск питонского способа сделать это до сих пор не принес результатов.

Итак, мой вопрос: каков питонный способ определения вложенных констант способом, который поддерживает простой рефакторинг?

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Вы можете использовать argparse.Namespace, что позволит вам получить доступ к членам так же, как для вашего класса:

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

А потом:

>>> permissions.user.add
'add_user' 
0 голосов
/ 28 апреля 2018

Словарь, наверное, самый простой способ.

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
...