Pythonの私有財産と「保護」プロパティ

「流暢なパイソン」から

Pythonは私有財産を作成するためにJavaのプライベート修飾子のように使用することはできませんが、Pythonは誤って上書きし、「プライベート」プロパティのサブクラスを回避するための簡単な機構を有しています。

たとえば。Dogクラスがあり、このクラスは、内部のムードインスタンスプロパティを使用しますが、それを開くことができませんでした。ビーグル:さて、あなたはサブクラス犬を作成します。あなたが例知識がないと気分を名前付きインスタンスのプロパティを作成する場合、この方法は、クラス属性犬の上書きの気分で継承されます。

__moodフォームは(2つの先頭のアンダースコア、全く又はほとんどの末尾のアンダースコアでの)インスタンス属性の名前ならば、この状況を回避するには、Pythonは、属性インスタンスに保存されている属性名を__dict__し、序文ますアンダースコアやクラス名。そこで、Dogクラスのために、それは__ムード_Dog__moodなり、ビーグルクラスで、それが_Beagle__moodになります。名前の書き換え(名前の符号化)と呼ばれるこの言語機能。

>>> v1 = Vector2d(3, 4)
>>> v1.__dict__
{'_Vector2d__y': 4.0, '_Vector2d__x': 3.0}
>>> v1._Vector2d__x
3.0

名前・リライトはセキュリティ対策です、我々は万全を保証することはできません:偶然のアクセスを防止することを意図しています。実際には、デバッグおよび直列化するのに便利です - ただ、プライベートプロパティ名の書き換えメカニズムを知っている、誰もが直接、私有財産を読み取ることができます。また、限りv1._Vector__x = 7書き込み、このコードのように、することができますプライベートコンポーネントVector2dインスタンスのための簡単に直接割り当てます。

アンダースコアの接頭辞タグ属性の使用のPythonドキュメントのいくつかのコーナーは、「保護」プロパティと呼ばれています。self._x財産保護に対する取り組みが共通しているこのフォームを使用します。Pythonインタプリタは、単一のアンダースコア特別な治療とプロパティ名にしないだろうが、これはPythonプログラマの多くは厳密に契約を遵守して、彼らはクラスの外に、このようなプロパティにアクセスしないでしょう。

オリジナルの記事は、0を発表 ウォンの賞賛0 ビュー148

おすすめ

転載: blog.csdn.net/Airfrozen/article/details/104354596