6

いくつかのリストと変数(で初期化)を持つpythonクラスがあります__init__

この特定のインスタンス データを操作し、新しいインスタンス (新しいデータ) を返すメソッドが必要です。最終的に、このメソッドは、元のインスタンスのデータをそのまま残しながら、変更されたデータを含む新しいインスタンスを返す必要があります。

これを行うためのpythonicの方法は何ですか?

編集:

クラスcomplement()には、特定の方法でデータを変更するメソッドがあります。ed データ__invert__()を持つクラスのインスタンスを返すメソッドを追加したいと思います。complement()

例: クラス 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の例でのFactoryデザインパターンの実装を意味していると思います

于 2013-03-21T13:42:03.727 に答える