Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取父类名称?_Python_Oop - Fatal编程技术网

Python 获取父类名称?

Python 获取父类名称?,python,oop,Python,Oop,此代码将打印 如何获取定义了方法的类名(即A)?您可以更改 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() 由于文档中没有其他可用的()实例…: 类对象具有\uuuuu name\uuuu属性。通过派生类的\uuuuu

此代码将打印

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

您可以更改

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()
由于文档中没有其他可用的()实例…

类对象具有
\uuuuu name\uuuu
属性。通过派生类的
\uuuuu base\uuuu
attr(例如,如果代码要在派生类中存在)内省基类可能会更干净

返回类cls基类的元组, 包括cls,按方法解析顺序。没有一个类比 在这个元组中有一次。请注意,方法的分辨率顺序取决于 cls的类型。除非使用了一个非常特殊的用户定义的元类型, cls将是元组的第一个元素

结果将是:

import inspect
inspect.getmro(B)
(,)

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

为什么不简单地
返回一个
?你最好检查一下我不认为这个问题是重复的。。。至少不是它所指的那个。一点也不喜欢。我对这个问题的解决方案是:self.\uuuuuu class.\uuuuuu mro.\uuuuu[1]。\uuuuuu name.\uuuuuuu+1对于这一点,也是有用的mro是方法解析顺序。检查这里。
>>> 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
import inspect
inspect.getmro(B)
(<class '__main__.B'>, <class '__main__.A'>, <type 'object'>)