这不是什么我的工作还没有,这只是因为我刚刚学习类的方法和吸一些测试代码。 但说我有以下代码
class Test(int):
def __init__(self,arg):
self = arg
def thing(self):
self += 10
去,富=测试(12)设置FOO到12但是我想它,所以当我这样做,foo.thing(),由10 FOO增加迄今为止,去foo.thing()只是把它放在12。我将如何改变这种代码来做到这一点。
因为int
是一个不可改变的,你不能神奇地把它变成一个可变的类型。
你的方法是空操作。 他们改变self
在当地的命名空间,通过重新分配给别的东西。 他们不再指向的实例。 换句话说,这两种方法保留原始实例不变 。
你不能做你想要的子类做什么int
。 你必须从头开始创建使用自定义类数字型吊钩来代替。
背景: int
有一个__new__
来分配实际值的方法self
,并没有__iadd__
就地加入到支持的方法。 该__init__
方法不会被忽略,但您完全可以忽略它,因为__new__
已经做的工作。
分配给self
意味着你刚刚更换的参考用别的东西,你并没有改变任何东西的情况下self
:
>>> class Foo(int):
... def __init__(self, value=0):
... print self, type(self)
... self = 'foobar'
... print type(self)
...
>>> foo = Foo(10)
10 <class '__main__.Foo'>
<type 'str'>
>>> print foo, type(foo)
10 <class '__main__.Foo'>
由于int
没有__iadd__
就地添加方法,你的self += 2
被解释为self = self + 2
代替; 再次,要分配到self
,并完全用新值替换它。