我有一個載體類方法:更改爲__add__,__mul__等操作的順序在自定義類
class Vector:
def __init__(self, x, y):
self.x, self.y = x, y
def __str__(self):
return '(%s,%s)' % (self.x, self.y)
def __add__(self, n):
if isinstance(n, (int, long, float)):
return Vector(self.x+n, self.y+n)
elif isinstance(n, Vector):
return Vector(self.x+n.x, self.y+n.y)
的正常工作,也就是我可以這樣寫:
a = Vector(1,2)
print(a + 1) # prints (2,3)
然而如果操作的順序是相反的,那麼它失敗:
a = Vector(1,2)
print(1 + a) # raises TypeError: unsupported operand type(s)
# for +: 'int' and 'instance'
我理解錯誤:增加一個int
objec的t到Vector
對象未定義,因爲我沒有在int
類中定義它。有沒有辦法解決這個問題,而無需在int
(或int
的父級)類中定義它?
好問題,你有我的upvote。 – plamut
你可能會覺得這有幫助:[特殊方法名稱](https://docs.python.org/3/reference/datamodel.html#special-method-names)。另請參閱Rafe Kettler的[Python的魔術方法指南](http://www.rafekettler.com/magicmethods.html)和[Python的神奇方法](https://pythonconquerstheuniverse.wordpress.com/2012/03/ 09/pythons-magic-methods) –