Python 标识定义类级别变量的超类

Python 标识定义类级别变量的超类,python,Python,在python中的多重继承的情况下,有没有一种方法可以确定类级变量是从哪个超类获得的 我尝试谷歌搜索的所有尝试都是关于如何获取属性,而不是找出属性的来源: 我想我可以使用inspect.getmro(cls)手动单步执行MRO。但我找不到任何更优雅的解决方案。只是想知道有没有人知道 编辑 举个具体例子: class Super1(object): __class_attribute__ = "Foo" class Super2(object): pass class D

在python中的多重继承的情况下,有没有一种方法可以确定类级变量是从哪个超类获得的

我尝试谷歌搜索的所有尝试都是关于如何获取属性,而不是找出属性的来源:

我想我可以使用
inspect.getmro(cls)
手动单步执行MRO。但我找不到任何更优雅的解决方案。只是想知道有没有人知道

编辑

举个具体例子:

class Super1(object):
    __class_attribute__ = "Foo"

class Super2(object):
    pass

class Derived(Super1, Super2):
    pass

d = Derived()

parent_cls = some_function_to_get_defining_class(d.__class_attribute__) # <-- should return `Super1`
class Super1(对象):
__class\u属性
Super2类(对象):
通过
派生类(Super1、Super2):
通过
d=派生的()

parent_cls=some_function_to_get_defining_class(d._class_属性_uuu)#属性
uuu qualname_uu
给出了从哪个类继承方法的指示。但是,这只返回一个字符串,而不是超类本身。如果您需要使用超类进行元编程,我认为您必须深入研究MRO

class A:
    def a(self):
        return 1
    def b(self):
        return 2

class B:
    def b(self):
        return 2.5
    def c(self):
        return 3

class C(A,B):
    pass
使用:

C.b.__qualname__
# returns:
'A.b'
但是,这在使用抽象方法定义接口时不适用,因为必须覆盖该方法

from abc import abstractmethod

class A:
    def a(self):
        return 1

    @abstractmethod
    def b(self):
        pass

class C(A):
    def b(self):
        return 100

C.b.__qualname__
# returns:
'C.b'

可能重复我的错误,@ipetrik,我以为你在看方法,而不是类级别的variables.NP,@James。对不起,没有区分。