获取子类名称?

时间:2010-07-23 00:50:04

标签: python

是否可以获取子类的名称?例如:

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

class SubFoo(Foo):
    pass

SubFoo().bar()

将打印:< type 'instance' >

我正在寻找获得"SubFoo"的方法。

我知道你可以做isinstance,但我不知道该班的名字是先验的,所以这对我不起作用。

4 个答案:

答案 0 :(得分:13)

你可以使用

SubFoo().__class__.__name__

这可能是偏离主题的,因为它为您提供了一个类名:)

答案 1 :(得分: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()。但是,这是很久以前的事了。没有太多理由不从对象继承。

答案 2 :(得分:2)

使用新式课程时效果会好很多。

class Foo(object):
  ....

答案 3 :(得分:1)

SubFoo.__name__

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