获取父类名称?

Fra*_*.TM 45 python oop

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()
Run Code Online (Sandbox Code Playgroud)

此代码将打印出来<class '__main__.B'>.

如何获取定义方法的类名(即A)?

Jer*_*own 61

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

类对象具有__name__属性.通过__bases__派生类的attr(例如,如果代码存在于派生类中),可能更清楚地反省基类(es ).

>>> 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
Run Code Online (Sandbox Code Playgroud)


var*_*tec 43

inspect.getmro(cls)

以方法解析顺序返回类cls基类的元组,包括cls.在这个元组中没有类出现过多次.请注意,方法解析顺序取决于cls的类型.除非使用非常特殊的用户定义的元类型,否则cls将是元组的第一个元素.

import inspect
inspect.getmro(B)
Run Code Online (Sandbox Code Playgroud)

结果将是:

(<class '__main__.B'>, <class '__main__.A'>, <type 'object'>)
Run Code Online (Sandbox Code Playgroud)

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

  • 对此+1,[`mro()`](http://docs.python.org/library/stdtypes.html?highlight=mro#class.__mro__)也很有用 (6认同)
  • MRO是方法解决顺序.点击这里,例如/sf/ask/129393211/ (2认同)