繁体   English   中英

Python类方法改变自我

[英]Python class methods changing self

这还不适合我正在从事的任何工作,只是一些测试代码,因为我只是在学习类方法和吮吸。 但是说我有以下代码

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

    def thing(self):
            self += 10

然后foo = Test(12)将foo设置为12。但是我想要它,所以当我这样做时,foo.thing()会使foo增加10。到目前为止,使用foo.thing()只能将其保持在12。我将如何更改此代码来做到这一点。

因为int是不可变的,所以不能神奇地将其转换为可变类型。

您的方法是禁止操作。 他们通过将self重新分配给其他名称来更改self在本地名称空间中的位置。 他们不再指向实例。 换句话说,这两种方法都不会改变原始实例。

您不能使用int的子类做您想做的事情。 您必须使用数字类型的钩子从头开始创建一个自定义类。

背景: int有一个__new__方法将实际值分配给self ,并且没有__iadd__方法来支持就地添加。 不会忽略__init__方法,但是由于__new__已经完成了工作,因此您可以将其完全__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并将其完全替换为新值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM