我希望能够以以下方式添加到自定义类:
x=myclass("Something", 7)
x + 3
当然,7对应于我希望通过添加它来增加的内部属性。
该类包含一个引用列表中某个位置的数字。这似乎可以通过普通整数来完成,但我需要它作为一个单独的类型。这一切都是为了模仿旧的游戏语言。该类是其“变量”类,变量的值存储在上述列表中。显然,在较旧版本的游戏中,数组是通过对变量对象实例进行数学运算来伪造的,以获取不同的变量。所以我试图效仿。
答案 0 :(得分:9)
如果您想支持类实例的添加,则需要在班级上定义__add__()
方法:
class MyClass(object):
def __init__(self, x):
self.x = x
def __add__(self, other):
return self.x + other
示例:
>>> a = MyClass(7)
>>> a + 3
10
要同时支持3 + a
,请定义__radd__()
方法。
如果您希望能够使用
更新x
个实例的MyClass
属性
a += 3
您可以定义__iadd__()
。
如果您希望类实例的行为类似于带有一些其他方法和属性的整数,则只需从int
派生。
答案 1 :(得分:0)
您要做的是运营商重载。您可以通过重载__add__
方法在python新样式类中执行此操作,如下所示:
>>> class Test(object):
... def __init__(self): self.prop = 3
... def __add__(self, x):
... return self.prop + x
...
>>> Test() + 4
7
>>>