Python の不変オブジェクト: 基本的なソリューションを超えて
標準のタプル クラスは不変性を提供しますが、この記事では不変オブジェクトを作成するためのより高度なテクニックについて説明します。純粋な Python または C 拡張機能を使用します。
__setattr__ のオーバーライド: 限定的なアプローチ
一般的な解決策の 1 つは、setattr メソッドをオーバーライドすることです。ただし、これにより init 関数でも属性を設定できなくなります。したがって、すべてのシナリオに適しているとは限りません。
タプルのサブクラス化: 部分的な解決策
別のアプローチは、タプルをサブクラス化し、カスタム new 属性にアクセスするためのメソッドとプロパティ。ただし、このメソッドは self[0] および self[1] を介した属性アクセスを完全に防ぐわけではないため、不便な場合があります。
名前付きタプルの解決策: シンプルさと互換性
よりシンプルで堅牢な解決策は、Python コレクション モジュールのnamedtuple クラスを使用することです:
Immutable = collections.namedtuple("Immutable", ["a", "b"])
前の手法と同様に、これはタプルから派生した型を作成し、__slots__ を使用します。これにはいくつかの利点があります:
結論
namedtuple クラスは、Python で不変オブジェクトを作成する便利で効率的な方法を提供します。これは高度な技術に代わる実行可能な代替手段であり、シリアル化の互換性などの追加の利点を提供します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3