获取父类名称?
问题描述:
class A(object):
def get_class(self):
return self.__class__
class B(A):
def __init__(self):
A.__init__(self)
b = B()
print b.get_class()
此代码将打印<class '__main__.B'>
。获取父类名称?
如何获得已定义方法的类名(即A
)?
答
从文档:https://docs.python.org/2/reference/datamodel.html#the-standard-type-hierarchy
Class对象有__name__
属性。通过派生类的attr(例如,如果代码要存在于派生类中),它可能更清晰地反思基类。
>>> class Base(object):
... pass
...
>>> class Derived(Base):
... def print_base(self):
... for base in self.__class__.__bases__:
... print base.__name__
...
>>> foo = Derived()
>>> foo.print_base()
Base
答
你可以改变
return self.__class__
return A().__class__
因为有一个的()没有其他可用的情况下...
+6
为什么不简单地'返回A'? – 2012-04-10 15:55:10
答
返回类CLS的基类的元组,包括 CLS,在方法的解析顺序。没有班级在此元组中出现超过 。请注意,方法解析顺序取决于 cls的类型。除非使用了一个非常独特的用户定义的元类型,否则cls将是元组的第一个元素。
import inspect
inspect.getmro(B)
结果将是:
(<class '__main__.B'>, <class '__main__.A'>, <type 'object'>)
第一个元素是类本身,第二个元素永远是第一位的家长。之后,事情会变得复杂一些。
你最好检查http://*.com/questions/961048/get-class-that-defined-method-in-python – okm 2012-04-10 16:16:07