我有很多描述層次結構的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