如何获取子类名?

24 投票
5 回答
18814 浏览
提问于 2025-04-16 01:43

有没有办法获取一个子类的名字?比如:

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

class SubFoo(Foo):
    pass

SubFoo().bar()

这段代码会打印出:< type 'instance' >

我想找到一种方法来获取"SubFoo"这个名字。

我知道可以用isinstance这个函数,但我事先并不知道类的名字,所以这个方法对我来说不太管用。

5 个回答

5

SubFoo.__name__ 是用来获取一个叫做 SubFoo 的类的名字。

而它的父类名字可以通过 [cls.__name__ for cls in SubFoo.__bases__] 这个代码来获取。这里的意思是:从 SubFoo 的父类列表中,提取每个父类的名字。

16

你可以使用

SubFoo().__class__.__name__

这可能有点跑题,因为它给了你一个类名 :)

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

class SubFoo(Foo):
  pass

SubFoo().bar()

object 继承可以让你创建新的风格的类(其实也不算新了,早在 Python 2.2 就有了!)如果你经常需要使用 self 这个属性,从 object 继承会让你得到更多的好处。Python 的文档中有关于 新风格类 的介绍。历史上,Python 保留了旧风格的写法 Foo() 是为了兼容以前的代码。但那已经是很久以前的事了,现在几乎没有理由不从 object 继承了。

撰写回答