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'>。
<class '__main__.B'>
如何得到定义方法的类名(即 A) ?
A
你可以改变
return self.__class__ return A().__class__
因为没有其他可用的 A ()实例..。
来自文档: https://docs.python.org/2/reference/datamodel.html#the-standard-type-hierarchy
类对象具有 __name__属性。通过派生类的 __bases__ attr (例如,如果代码存在于派生类中)内省基类可能更简单。
__name__
__bases__
>>> 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
inspect.getmro(cls) 返回类 cls 的基类的元组, 按方法解析顺序包括 cls 请注意,方法解析顺序取决于 除非正在使用一个非常特殊的用户定义的元类型, Cls 将是元组的第一个元素
inspect.getmro(cls)
返回类 cls 的基类的元组, 按方法解析顺序包括 cls 请注意,方法解析顺序取决于 除非正在使用一个非常特殊的用户定义的元类型, Cls 将是元组的第一个元素
import inspect inspect.getmro(B)
结果是:
(<class '__main__.B'>, <class '__main__.A'>, <type 'object'>)
第一个元素是类本身,第二个元素总是父元素的第一个。之后事情会变得更复杂。