2017-08-24 41 views
0

我有一個類動物,我想它有一個屬性,允許訪問一組特定的功能。如何實現包含方法的python類屬性?

class Animal(object): 
    def __init__(self, age): 
     self.age = age 

rex = Animal() 
rex.actions.bark() 
rex.actions.say_age() 

我試圖創建一個動作類,並用它作爲多重繼承一個mixin,但只是讓我做這件事:

rex.say_age() 

這不是我想要的。

我也嘗試過創建一個完整的靜態方法並使用它們的Actions類,但這迫使我將Animal的屬性傳遞給方法。

我知道熊貓實現這個(Series.str就是一個例子),但它看起來像它需要大量的專有開銷

的有一個Python的方式做到這一點?

+0

您正在尋找*構成*無遺傳。 –

回答

3

只需創建另一個需要構造函數中的Animal的類。

class AnimalActions(object): 
    def __init__(self, animal): 
    self.animal = animal 

class Animal(object): 
    def __init__(self, age): 
    self.age = age 
    self.actions = AnimalActions(self) 
+0

有沒有問題有一個類包含第二類的實例包含第一類的實例?它似乎創建了一個無限嵌套的屬性 – Alon

+1

只要你沒有任何'__del __()'(析構函數)方法,就沒有問題。這是一個引用循環,但只要沒有析構函數方法,Python GC就可以處理它。如果循環中的任何對象有任何析構函數,它將以'gc.garbage'結尾(https://docs.python.org/3.6/library/gc.html#gc.garbage) –

+0

而且它不是「包含「,它只是」參考「。對於每個「Animal」對象,只會有一個「AnimalAction」。把它看作彼此的指針,而不是成員/包含的數據。 –

相關問題