2010-07-23 68 views
19

是否可以獲取子類的名稱?例如:獲取子類名?

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

class SubFoo(Foo): 
    pass 

SubFoo().bar() 

會打印:< type 'instance' >

我正在尋找一種方式來獲得"SubFoo"

我知道你可以做isinstance,但我不知道班上的名字是否屬於先驗,所以這對我不起作用。

+0

..至少,你可以使用'issubclass(SubFoo,富)' – mykhal 2010-07-23 01:08:40

回答

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

class SubFoo(Foo): 
    pass 

SubFoo().bar() 

object子類爲您提供了新的樣式類(這不再是新東西了 - python 2.2)任何時候,如果你想從自己的屬性中得到很多東西,那麼如果你從對象中繼承,你會得到更多的東西。 Python的文檔... new style classes。從歷史上來說,Python爲了向後兼容而留下舊式的方式Foo()。但是,這是很久以前的事了。沒有太多的理由不再從對象中繼承。

+0

而'Foo()'不適用於老版本的Python。 – 2010-07-23 01:07:01

3

當你使用新風格的類時,它會更好。

class Foo(object): 
    .... 
13

可以使用

SubFoo().__class__.__name__ 

這可能是題外話,因爲它給你一個類名:)

+0

@ars不完全 – mykhal 2010-07-23 00:59:16

+0

哎呦,對不起。你是對的,我的不好。 – ars 2010-07-23 01:32:13

1

SubFoo.__name__

而且父母:[cls.__name__ for cls in SubFoo.__bases__]