我有很多描述层次结构的Python类型,它们的属性越来越具体。而不是试图去描述它的话,这里有一个例子:如何在Python中没有is-a关系的情况下共享属性?
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
因此,当你走在班级名单,B
拥有所有的A
的属性,然后一些额外的人的。 C
具有B
的所有属性,然后是一些额外的属性,依此类推。如果可能,我想尽量减少上述定义的重复。
一个明显的解决方案是使用继承,使B
为A
的一个子类等等。但是,这些类型的语义不遵循is-a关系;我不想isinstance(bObject, A)
为True
。在Python中是否有另一种方式直接允许这种不使用子类的属性共享?
您可以使用组合而不是子类。 – TheZ 2012-07-17 16:08:44
我想你的意思是我可以在每个'B'内部放置一个'A',然后重新实现''''''''''从''A''实例拉取属性访问器。这是我们想到的另一种解决方案,但这看起来不像上面所示的那样更紧凑。 – 2012-07-17 16:10:04
为什么你真的关心'isinstance'返回什么?你真的有一个很好的理由来永远调用'isinstance'吗? – geoffspear 2012-07-17 16:13:54