gpt4 book ai didi

python - 如何使类方法返回其自身的新实例?

转载 作者:太空狗 更新时间:2023-10-30 01:02:32 24 4
gpt4 key购买 nike

我有一个 python 类,它有一些列表和变量(在 __init__ 中初始化)。

我想要一个方法来操作这个特定的实例数据并返回一个新实例(新数据)。最后,此方法应返回一个具有修改后数据的新实例,同时保持原始实例的数据完好无损。

执行此操作的 pythonic 方法是什么?

编辑:

我在类中有一个名为 complement() 的方法,它以特定方式修改数据。我想添加一个 __invert__() 方法,该方法返回带有 complement()ed 数据的类实例。

例子:假设我有一个A类。
a=A()
a.complement() 将修改实例 a 中的数据。
b = ~a 会保留实例 a 中的数据不变,但 b 将包含 complement()ed 数据。

最佳答案

我喜欢实现一个 copy 方法来创建对象的相同实例。然后我可以随意修改该新实例的值。

class Vector:
def __init__(self, x, y):
self.x, self.y = x, y

def copy(self):
"""
create a new instance of Vector,
with the same data as this instance.
"""
return Vector(self.x, self.y)

def normalized(self):
"""
return a new instance of Vector,
with the same angle as this instance,
but with length 1.
"""
ret = self.copy()
ret.x /= self.magnitude()
ret.y /= self.magnitude()
return ret

def magnitude(self):
return math.hypot(self.x, self.y)

因此在您的情况下,您可以定义如下方法:

def complemented(self):
ret = self.copy()
ret.__invert__()
return ret

关于python - 如何使类方法返回其自身的新实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15548886/

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