获取父类名称?

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) ?

88116 次浏览

你可以改变

return self.__class__


return A().__class__

因为没有其他可用的 A ()实例..。

来自文档: https://docs.python.org/2/reference/datamodel.html#the-standard-type-hierarchy

类对象具有 __name__属性。通过派生类的 __bases__ 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

inspect.getmro(cls)

返回类 cls 的基类的元组, 按方法解析顺序包括 cls 请注意,方法解析顺序取决于 除非正在使用一个非常特殊的用户定义的元类型, Cls 将是元组的第一个元素

import inspect
inspect.getmro(B)

结果是:

(<class '__main__.B'>, <class '__main__.A'>, <type 'object'>)

第一个元素是类本身,第二个元素总是父元素的第一个。之后事情会变得更复杂。