gpt4 book ai didi

改变自身的 Python 类方法

转载 作者:行者123 更新时间:2023-11-28 22:57:04 33 4
gpt4 key购买 nike

这不是我正在做的任何事情,它只是一些测试代码,因为我只是在学习类方法并且很烂。但是说我有以下代码

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。它们不再指向实例。换句话说,这两种方法都保留原始实例不变

你不能用 int 的子类做你想做的事。您必须使用 numeric type hooks 从头开始​​创建自定义类相反。

背景: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 类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14671218/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com