Python类方法改变自我(Python class methods changing self)

2019-08-16 17:00发布

这不是什么我的工作还没有,这只是因为我刚刚学习类的方法和吸一些测试代码。 但说我有以下代码

class Test(int):
    def __init__(self,arg):
            self = arg

    def thing(self):
            self += 10

去,富=测试(12)设置FOO到12但是我想它,所以当我这样做,foo.thing(),由10 FOO增加迄今为止,去foo.thing()只是把它放在12。我将如何改变这种代码来做到这一点。

Answer 1:

因为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 ,并完全用新值替换它。



文章来源: Python class methods changing self