2010-07-23 74 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__]