2013-07-15 2 views
6

Вопрос прост, и я попытался сделать отступ подходящим для удобочитаемости. Я просто запуск с Python, и вот что у меня сейчас:Динамически получить имя класса в переменной уровня класса в python

class BaseKlass(): 
    .... 

class DerivedKlass1(BaseKlass): 
    display_name = "DerivedKlass1" 

class DerivedKlass2(BaseKlass): 
    display_name = "DerivedKlass2" 

Поэтому в основном все производные классы имеет

переменную display_name с именем класса закодированного.

То, что я хочу, чтобы иметь display_name набор в BaseKlass и удалить объявление display_name из дочерних классов следующим образом:

class BaseKlass(): 
    display_name = <some way to set the display name to callee class name> 

class DerivedKlass1(BaseKlass): 
    .... 

class DerivedKlass2(BaseKlass): 
    .... 

Так что DerivedKlass1.display_name должен вернуть «DerivedKlass1» и DerivedKlass2.display_name должен возвращать «DerivedKlass2».

Я знаю, что мне не хватает чего-то очень очевидного, и я ожидаю много комментариев RTFM, но независимо от того, что я хочу, это научиться динамически устанавливать имя класса python для атрибута уровня. Поэтому не стесняйтесь голосовать, если хотите, но я буду благодарен, если вы оставите ответ.

Спасибо,

ответ

5

Вы можете получить доступ к имени класса объекта с

obj.__class__.__name__ 

Вы должны будете сделать это после того, как экземпляр был создан Тхо. Наиболее прямой путь будет

class MyClass: 

    def __init__(self): 
     self.display_name = self.__class__.__name__ 

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

+0

Да, это работает :). спасибо @astrognocci. – splintercell

Смежные вопросы