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

请问具备级联属性特性的该设计模式名称是什么?

这种设计模式是什么?

首先看以下Python代码实现:

DO_NOT_OVERRIDE = type() # 用于标记属性是否不被覆盖。

class Parent():
    def __init__(self, a: int = 0, b: int = 0):
        self.a = a
        self.b = b

class Child():
    def __init__(self, parent: Parent, a: int = DO_NOT_OVERRIDE, b: int = DO_NOT_OVERRIDE):
        self.parent = parent
        
        self._a = a
        self._b = b

    @property
    def a(self):
        if self._a is DO_NOT_OVERRIDE:
            return self.parent.a

        return self._a

    @a.setter
    def a(self, value: int):
        self._a = value


    @property
    def b(self):
        if self._b is DO_NOT_OVERRIDE:
            return self.parent.b

        return self._b

    @b.setter
    def b(self, value: int):
        self._b = value

创建对象并测试行为:

parent_obj = Parent(a = 1, b = 2)
child_obj_1 = Child(parent = parent_obj)

此时child_obj_1.a返回1,child_obj_1.b返回2,值均来自父对象parent_obj的对应属性。

再创建另一个Child实例:

child_obj_2 = Child(parent_obj, a = 20)

child_obj_2.a返回20(自身设置的值),而child_obj_2.b仍返回2,因为该属性未被当前Child实例覆盖,会 fallback 到父对象的属性值。


这种设计属于**代理模式(Proxy Pattern)的变种,同时也和委托模式(Delegation Pattern)**高度契合:

  • Child类作为Parent类的代理/委托对象,控制对Parent属性的访问
  • 当Child自身未覆盖属性时,将访问请求委托给Parent对象获取值;当Child设置了自身属性后,直接返回自身存储的值
  • 这种实现还支持“部分覆盖”特性,允许代理对象选择性重写原对象的部分属性,其余属性仍复用原对象的内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:57:26