繁体   English   中英

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

[英]How can I access attributes from all parent classes?

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

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

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

t=T2()

我想调用tf()返回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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM