Вложенные классы для имитации статических членов - PullRequest
1 голос
/ 03 июня 2011

Я пытаюсь имитировать «статический» член, вкладывая класс в другой класс для определения констант классов.

F.E.

class foo:
  class NoAuthActions: Action1, Action2, Action3 = ["action1", "action2", "action3"]
  class AuthActions: Action4, Action5, Action6 = ["action4", "action5", "action6"]

Есть ли лучший способ добиться этого в python?

Я делаю это для улучшения дизайна библиотеки API.

Edit:

API основан на веб-запросах (google maps, foursquare и т. Д.), Поэтому мне просто нужен лучший способ обернуть его. Поскольку сам API состоит из типов действий, которые пользователи могут и не могут выполнять без oauth-аутентификации, мне нужен способ лучше организовать его.

И, таким образом, пространство имен звучит как лучший способ упорядочить вещи, так как в api запросов есть действия для каждой конечной точки (было бы разумнее упомянуть, что я выбрал этот подход, поскольку все действия имеют тот же базовый URL).

Вкратце: мне нужен дизайн, чтобы API было легко использовать все действия и сделать так, чтобы необходимая аутентификация была максимально отделена от API. Ведь мне нужен только oauth-токен или application_ID

Спасибо

Ответы [ 2 ]

3 голосов
/ 03 июня 2011

Почему внутренний класс?

class Foo:
    action1, action2, action3 = ["action1", "action2", "action3"]

создаст класс Foo с тремя атрибутами класса action1, action2 и action3. Вы можете получить к ним доступ через Foo.action1 или foo.action1 для Foo экземпляра foo. Чтобы изменить значение переменной класса, используйте

Foo.action1 = "new_action"

или

foo.__class__.action1 = "new_action"
0 голосов
/ 03 июня 2011

Если вы хотите, чтобы элементы были постоянными только для чтения, рассмотрите возможность использования одного из ответов на этот вопрос, Свойства только для чтения на уровне класса в Python .

...