Python は、クラスのメソッドと属性にプライベートな名前マングルを提供します。
この機能が必要となる具体的なケースはありますか、それとも Java と C++ からの単なる継承ですか?
ある場合、Python の名前マングリングを使用する必要があるユース ケースを説明してください。
また、作成者が偶発的な外部属性アクセスを防止しようとしているだけの場合には興味がありません。このユース ケースは、Python プログラミング モデルと一致していないと思います。
Python は、クラスのメソッドと属性にプライベートな名前マングルを提供します。
この機能が必要となる具体的なケースはありますか、それとも Java と C++ からの単なる継承ですか?
ある場合、Python の名前マングリングを使用する必要があるユース ケースを説明してください。
また、作成者が偶発的な外部属性アクセスを防止しようとしているだけの場合には興味がありません。このユース ケースは、Python プログラミング モデルと一致していないと思います。
内部属性への偶発的なアクセスを防ぐためです。次に例を示します。
ライブラリであるあなたのコードでは:
class YourClass:
def __init__(self):
self.__thing = 1 # Your private member, not part of your API
あなたのライブラリクラスから継承している私のコードでは:
class MyClass(YourClass):
def __init__(self):
# ...
self.__thing = "My thing" # My private member; the name is a coincidence
私的な名前のマングリングがなければ、私があなたの名前を誤って再利用すると、あなたのライブラリが壊れてしまいます.
PEP 8から:
クラスがサブクラス化されることを意図しており、サブクラスで使用したくない属性がある場合は、先頭にアンダースコアを 2 つ付け、末尾にアンダースコアを付けない名前を付けることを検討してください。これにより、Python の名前マングリング アルゴリズムが呼び出され、クラスの名前が属性名にマングルされます。 これにより、サブクラスに誤って同じ名前の属性が含まれる場合に、属性名の衝突を回避できます。
(強調を追加)
名前マングリングは、偶発的な外部属性アクセスを防ぐためにあります。ほとんどの場合、名前の衝突がないことを確認するためにあります。