2012-03-23 85 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