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