在python中有多重继承的情况下,有没有办法识别从哪个超类中获取类级变量?
我试图谷歌的所有尝试绝大多数关于如何让属性找不到它的来源:
https://www.google.com/search?q=pythin+which+super+class+defines+attr
https://www.google.com/search?q=python+which+super+class+attribute+obtained+from
我想我可以使用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`
答案 0 :(得分:0)
__qualname__
属性指示继承方法的类。但是,这只返回一个字符串,而不是超类本身。如果你需要超类来进行元编程,我想你将不得不深入研究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'