You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中合并不同父类定义的property属性?

合并多继承中不同父类的property属性输出

假设有两个类Foo和Bar,各自通过不同逻辑计算property属性stuff。现在需要在子类的属性中合并这两个父类的stuff输出,预期效果如下(代码中get_stuff_from需要替换为合法Python语法):

class Foo():
    @property
    def stuff(self):
        return ['a','b','c']

class Bar():
    @property
    def stuff(self):
        return ['1','2','3']

class FooBar(Foo, Bar):
    @property
    def stuff(self):
        # 计算Foo类逻辑下的stuff值
        foo_stuff = get_stuff_from(Foo)

        # 计算Bar类逻辑下的stuff值
        bar_stuff = get_stuff_from(Bar)

        # 返回合并后的结果
        return foo_stuff + bar_stuff

foo_bar = FooBar()
print(foo_bar.stuff)

预期运行后输出:

['a', 'b', 'c', '1', '2', '3']

如果stuff是普通方法而非property,实现起来会很简单,示例如下:

class Foo():
    def stuff(self):
        return ['a','b','c']

class Bar():
    def stuff(self):
        return ['1','2','3']

class FooBar(Foo, Bar):
    def stuff(self):
        # 调用Foo类的stuff方法
        foo_stuff = Foo.stuff(self)

        # 调用Bar类的stuff方法
        bar_stuff = Bar.stuff(self)

        # 返回合并后的结果
        return foo_stuff + bar_stuff

foo_bar = FooBar()
print(foo_bar.stuff())

解决方案

当然可以用property实现相同效果,核心是直接调用父类property对应的 getter 方法,或者通过描述符协议的__get__方法获取值,具体实现如下:

方法一:调用fget属性

class Foo():
    @property
    def stuff(self):
        return ['a','b','c']

class Bar():
    @property
    def stuff(self):
        return ['1','2','3']

class FooBar(Foo, Bar):
    @property
    def stuff(self):
        # 调用Foo类中stuff属性的getter方法
        foo_stuff = Foo.stuff.fget(self)
        # 调用Bar类中stuff属性的getter方法
        bar_stuff = Bar.stuff.fget(self)
        return foo_stuff + bar_stuff

foo_bar = FooBar()
print(foo_bar.stuff)

方法二:调用描述符的__get__方法

class FooBar(Foo, Bar):
    @property
    def stuff(self):
        foo_stuff = Foo.stuff.__get__(self)
        bar_stuff = Bar.stuff.__get__(self)
        return foo_stuff + bar_stuff

这两种方式都能正确获取对应父类property的计算结果:@property装饰器会把原方法包装成property对象,其中fget属性指向原来的 getter 方法;而__get__是描述符协议中定义的方法,专门用于获取属性值。

内容的提问来源于stack exchange,提问作者LuizFelippe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 05:35:25