Python 类方法改变自身

2023-12-12

这不适用于我正在做的任何事情,这只是一些测试代码,因为我只是在学习类方法并且很糟糕。但是假设我有以下代码

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。我该怎么办更改此代码即可做到这一点。


Because int是不可变的,你不能神奇地将它变成可变类型。

你的方法是无操作的。他们改变了self在本地命名空间中,通过将其重新分配给其他东西。他们不再指向该实例。换句话说,这两种方法都离开了原始实例不变的.

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

背景:int has a __new__将实际值分配给的方法self,并且没有__iadd__方法支持就地添加。这__init__方法不会被忽略,但你可以完全忽略它,因为__new__已经做了工作。

分配给self意味着你只是用其他东西替换了对实例的引用,你没有alter关于什么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'>

Because int没有__iadd__就地添加方法,你的self += 2被解释为self = self + 2反而;再次,您正在分配给self并将其完全替换为新值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 类方法改变自身 的相关文章

随机推荐