2012-03-23 61 views
7

我希望能夠添加到自定義類的風格:添加到自定義類在Python

x=myclass("Something", 7) 
x + 3 

7,當然,對應與我想增加一個內財產通過添加到它。

該類包含引用列表中某個位置的數字。這看起來像是可以用普通整數完成的事情,但我需要它作爲一個單獨的類型。這一切都是爲了模仿舊的遊戲語言。該類是它的'變量'類,變量的值存儲在上述列表中。顯然,在較舊版本的遊戲中,通過對變量對象實例進行數學運算以獲取不同的變量,數組被僞造。所以我試圖效仿。

+0

的類包含一個數字,指的是位置在列表中。這看起來像是可以用普通整數完成的事情,但我需要它作爲一個單獨的類型。這一切都是爲了模仿舊的遊戲語言。該類是它的'變量'類,變量的值存儲在上述列表中。顯然,在較舊版本的遊戲中,通過對變量對象實例進行數學運算以獲取不同的變量,數組被僞造。所以我試圖效仿@。@ – Kelketek 2012-03-23 13:11:42

+0

仍然不確定需求是什麼,但是從這個評論看來,似乎來自'int'的dervie最簡單。 – 2012-03-23 13:16:01

+0

@凱爾克泰克:我已經將你的評論轉移到了問題上,這就是它所屬的問題。 – 2012-03-23 13:16:17

回答

9

如果你想支持另外的類的實例,你需要在你的類中定義的__add__()方法:

​​

例子:

>>> a = MyClass(7) 
>>> a + 3 
10 

也支持3 + a,定義__radd__()方法。

如果你希望能夠使用

a += 3 

可以定義__iadd__()更新MyClass實例x屬性。

如果您希望類實例的行爲與具有其他方法和屬性的整數類似,那麼您應該簡單地從int派生。

+0

這工作。我不想要int的所有功能。例如,我不希望radd爲這個案件工作。是否有某個功能列表可以顯示我可以實現的功能?我是否需要在我的類的int類中添加我想支持的方法? – Kelketek 2012-03-23 13:25:36

+0

@Kelketek:只需按照該帖子中的任何鏈接進一步瞭解魔術方法。我不明白你的第二個問題。 – 2012-03-23 13:28:37

+1

我喜歡Python,因爲這些功能。你幾乎可以在Python中做任何事情。 – beary605 2012-05-25 00:12:08

0

你要做的是操作員重載。您可以通過重載__add__方法,像這樣在Python新式類做到這一點:

>>> class Test(object): 
...  def __init__(self): self.prop = 3 
...  def __add__(self, x): 
...   return self.prop + x 
... 
>>> Test() + 4 
7 
>>> 
+0

重讀我寫的內容,在添加時我可能不應該修改'prop'屬性。哎呦。 – 2012-03-23 13:13:29