ホームページ  >  記事  >  バックエンド開発  >  Python で真の不変性を実現するにはどうすればよいでしょうか?

Python で真の不変性を実現するにはどうすればよいでしょうか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-25 08:25:28589ブラウズ

How Can We Achieve True Immutability in Python?

Python での不変オブジェクトの作成

Python での不変オブジェクトの作成には課題が生じる可能性があります。初期化中に属性を設定できないため、setattr をオーバーライドするだけでは不十分です。一般的に使用される解決策は、以下に示すように、タプルをサブクラス化することです:

<code class="python">class Immutable(tuple):
    def __new__(cls, a, b):
        return tuple.__new__(cls, (a, b))

    @property
    def a(self):
        return self[0]
        
    @property
    def b(self):
        return self[1]

    def __str__(self):
        return "<Immutable {0}, {1}>".format(self.a, self.b)
    
    def __setattr__(self, *ignored):
        raise NotImplementedError

    def __delattr__(self, *ignored):
        raise NotImplementedError</code>

ただし、このアプローチでは、self[0] および self[1] を介して a および b 属性へのアクセスが許可されるため、不便な場合があります。 .

純粋な Python の不変性を実現するには、別の代替手段が存在します。

<code class="python">Immutable = collections.namedtuple("Immutable", ["a", "b"])</code>

このメソッドは、スロット を利用し、タプルから継承して、目的の動作を持つ型を生成します。これは、pickle および copy との互換性という利点を提供しますが、[0] および [1] を介して属性にアクセスすることも可能です。

以上がPython で真の不変性を実現するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。