Использование атрибута класса в определении метода в качестве аргумента?

У меня есть следующий код:

class Blah:
  ABC, DEF = range(2)

  def meth(self, arg=Blah.ABC):
     .....

Blah.ABC работает внутри метода или в любом месте снаружи, единственное место, где он не работает - это определение метода!!!

Любой способ решить это???

1 ответ

Решение

Пока не используйте имя класса Blah, так как оно еще не закончено. Но вы можете напрямую получить доступ к члену класса ABC, не связывая его с классом:

class Blah:
    ABC, DEF = range(2)

    def meth(self, arg=ABC):
        print arg

Blah().meth()
# it prints '0'

Он также работает с использованием "нового" определения класса стиля, например:

class Blah(object):
    ABC, DEF = range(2)

К тому времени, когда я по-настоящему попал в python, новые классы стилей стали нормой, и они намного больше похожи на другие языки OO... так что это все, что я использую. Не уверен, какие преимущества (если есть) в том, чтобы придерживаться старого способа... но это кажется устаревшим, поэтому я бы сказал, что если нет причины, я бы использовал новый стиль. Возможно, кто-то еще может прокомментировать это.

Другие вопросы по тегам