获取父类的名字吗? [重复](Get parent class name? [duplicate

2019-06-23 12:26发布

这个问题已经在这里有一个答案:

  • 把那定义的方法类 5个回答
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 )?

Answer 1:

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

Class对象有一个__name__属性。 它可能吸尘器内省通过基类(ES) __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


Answer 2:

inspect.getmro(cls)

返回类CLS的基类,包括CLS的元组,在方法解析顺序。 无级似乎比在这个元组一次。 需要注意的是,方法解析顺序取决于CLS的类型。 除非一个非常特殊的用户定义的元类型是在使用中,CLS将是元组的第一个元素。

import inspect
inspect.getmro(B)

结果将是:

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

第一个元素是类本身,第二个元素永远是第一位的家长。 在此之后情况可能会变得有点复杂。



Answer 3:

你可以改变

return self.__class__

return A().__class__

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



文章来源: Get parent class name? [duplicate]
标签: python oop