2010-07-23 3 views
19

Возможно ли получить имя подкласса? Например:Получить имя подкласса?

class Foo: 
    def bar(self): 
     print type(self) 

class SubFoo(Foo): 
    pass 

SubFoo().bar() 

напечатает: < type 'instance' >

Я ищу способ получить "SubFoo".

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

+0

.. по крайней мере, вы можете использовать 'issubclass (SubFoo, Foo)' – mykhal

ответ

8
#!/usr/bin/python 
class Foo(object): 
    def bar(self): 
    print type(self) 

class SubFoo(Foo): 
    pass 

SubFoo().bar() 

подклассов от object дает вам классы нового стиля (которые уже не новы - python 2.2!) В любое время, когда вы хотите работать с атрибутом self, вы получите намного больше для своего доллара, если вы подклассом из объекта. Документы Python ... new style classes. Исторически Python оставил старомодный способ Foo() для обратной совместимости. Но это было давно. Существует не так много причин не подкласса от объекта.

+0

И 'Foo()' не будет работать и с старыми версиями Python. –

3

Он работает намного лучше, когда вы используете классы нового стиля.

class Foo(object): 
    .... 
13

вы можете использовать

SubFoo().__class__.__name__ 

, которые могут быть не по теме, так как это дает вам имя класса :)

+0

@ars не точно – mykhal

+0

Упс, извините. Ты прав, мой плохой. – ars

1

SubFoo.__name__

И родители: [cls.__name__ for cls in SubFoo.__bases__]

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