gpt4 book ai didi

python - 如何访问所有父类的属性?

转载 作者:太空宇宙 更新时间:2023-11-03 17:42:58 25 4
gpt4 key购买 nike

class T(object):
def f(self):
pass

class T1(T):
fields = set(('x1', 'y1', 'z1'))

class T2(T1):
fields = set(('x2', 'y2'))

t=T2()

我希望调用 t.f() 返回 set(('x1','y1','z1','x2','y2')) ,我不想在每个子类中重写“f”,有什么想法吗?

最佳答案

这适用于您的示例:

class T(object):
def f(self):
fields = set()
for cls in self.__class__.mro():
if hasattr(cls, 'fields'):
fields = fields.union(cls.fields)
return fields

class T1(T):
fields = set(('x1', 'y1', 'z1'))

class T2(T1):
fields = set(('x2', 'y2'))

t = T2()
t.f()

返回:

{'x1', 'x2', 'y1', 'y2', 'z1'}

方法mro() 为您提供方法解析顺序。这是 Python 依次访问的类列表以查找方法。因此,如果某个方法在子类中不存在,则会在此列表的类中查找该方法。如果最后一个类没有此属性,它将抛出一个AttributeError。这里,我们使用此列表在父项列表中搜索属性 fields,并将所有找到的集放入结果集 fields 中。

关于python - 如何访问所有父类的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30212354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com