2014-07-11 2 views
2

Как мне получить доступ к переменной класса, которую я ожидаю заменить подклассом?Доступ к переопределенной переменной класса в родительском подклассе

это то, что я хочу acchieve:

class Foo(): 
    var = "Foo" 
    @staticmethod 
    def print_var(): 
    print(Foo.var) 

class Bar(Foo): 
    var = "Bar" 

>> Bar.print_var() 
>> "Bar 

Код выше печатает "Foo" вместо "Бар"

+0

Почему вы используете статический метод тогда? –

+0

Я хотел бы получить к нему доступ, не создавая экземпляр. Это плохой подход? Я пытаюсь высушить код – SverkerSbrg

ответ

2

Не используйте staticmethod. В самом крайнем случае использования @classmethod decorator здесь:

class Foo(): 
    var = "Foo" 

    @classmethod 
    def print_var(cls): 
     print(cls.var) 

class Bar(Foo): 
    var = "Bar" 

Это делает print_var доступным на классе, но передается ссылка на текущий класс, так что вы можете посмотреть var на «правой» объекта.

Используйте staticmethod, только если вы хотите удалить весь контекст из метода, снова включив его в обычную функцию.

Демо:

>>> class Foo(): 
...  var = "Foo" 
...  @classmethod 
...  def print_var(cls): 
...   print(cls.var) 
... 
>>> class Bar(Foo): 
...  var = "Bar" 
... 
>>> Bar.print_var() 
Bar 
>>> Foo.print_var() 
Foo 
+0

Убей меня, у тебя есть опечатка в стиле classmethod –

+0

Спасибо! Линии между двумя были немного нечеткими для меня. – SverkerSbrg

+0

@JamieCockburn: да, давно исправлено. :-) –

2

Используйте classmethod:

class Foo(): 
    @classmethod 
    def print_var(cls): 
     print(cls.var) 
Смежные вопросы