我有许多Python类型来描述层次结构,因为它们在属性方面越来越具体.这是一个例子,而不是试图用文字描述它:
class A:
@property
def prop1(self):
return self._prop1
class B:
@property
def prop1(self):
return self._prop1
@property
def prop2(self):
return self._prop2
class C:
@property
def prop1(self):
return self._prop1
@property
def prop2(self):
return self._prop2
@property
def prop3(self):
return self._prop3
Run Code Online (Sandbox Code Playgroud)
因此,当您进入类列表时,B具有所有属性,A然后是一些额外的属性.C具有所有属性,B然后是一些额外的属性,依此类推.如果可能的话,我想尽量减少上述定义的重复.
一个显而易见的解决方案是使用继承,创建B子类A等等.但是,这些类型的语义不遵循is-a关系; 我不想isinstance(bObject, A)成为True.在Python中是否有另一种方法可以直接允许在不使用子类的情况下共享属性?
你可以使用装饰器:
def has_prop1(cls):
@property
def prop1(self):
return self._prop1
cls.prop1 = prop1
return cls
@has_prop1
class A(object):
pass
Run Code Online (Sandbox Code Playgroud)
合成将如下:
@has_prop1
@has_prop2
class B(object):
pass
Run Code Online (Sandbox Code Playgroud)
或者甚至像这样:
def has_many_properties(cls):
return has_prop1(has_prop2(has_prop3(cls)))
@has_many_properties
class C(object):
pass
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |