请问具备级联属性特性的该设计模式名称是什么?
这种设计模式是什么?
首先看以下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
相关产品推荐
相关产品推荐

