6

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

我希望有一个方法可以对这个特定的实例数据进行操作并返回一个新实例(新数据)。最后,这个方法应该返回一个带有修改数据的新实例,同时保持原始实例的数据完好无损。

什么是pythonic方式来做到这一点?

编辑:

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

示例:假设我有一个类A。a
=A()
a.complement() 将修改实例 a 中的数据。
b = ~a 将使实例 a 中的数据保持不变,但 b 将包含补码()数据。

4

3 回答 3

5

我喜欢实现一个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
于 2013-03-21T13:39:07.330 回答
3

复制模块可以完全按照您的意愿复制实例:

def __invert__(self):
    ret = copy.deepcopy(self)
    ret.complemented()
    return ret
于 2013-03-21T13:45:44.023 回答
1

我认为您的意思是在 Python示例中实现工厂设计模式

于 2013-03-21T13:42:03.727 回答