如何获取子类名?
有没有办法获取一个子类的名字?比如:
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 继承了。