Jason的菜地
谁言书生无用,笔下自有乾坤

ME:
python 如何判断某个方法是继承于哪个父类? 给个能直接用的示例,能够自动遍历多层父类
GPT:
在 Python 中,可以通过使用内置函数 inspect.getmro() 来获取一个类的方法解析顺序,从而判断某个方法是继承自哪个父类。示例代码如下:

import inspect

class A:
    def foo(self):
        pass

class B(A):
    pass

class C(B):
    pass

def find_method_class(cls, method_name):
    for c in inspect.getmro(cls):
        if method_name in c.__dict__:
            return c
    return None

c = C()
method_class = find_method_class(C, 'foo')
print(method_class)

在上述代码中,我们定义了三个类 A、B 和 C,其中 B 和 C 分别继承自 A。然后定义了一个函数 find_method_class,该函数接受一个类和一个方法名作为参数,返回该方法所在的类。在函数中,我们使用 inspect.getmro() 函数获取类的方法解析顺序,并逐一遍历每一个类,判断该类中是否存在该方法,如果存在则返回该类。如果遍历完所有类都没有找到该方法,则返回 None。

最后,我们创建了一个 C 类的实例,并使用 find_method_class 函数查找该实例中的 foo 方法所在的类,并打印出结果。由于 C 类本身并没有定义 foo 方法,因此该方法继承自其父类 A。因此,上述代码的输出结果为:

<class '__main__.A'>

该结果表明,C 类的 foo 方法是继承自 A 类的。

posted on 2023-03-13 19:26  贾森  阅读(95)  评论(0编辑  收藏  举报