回答編集履歴
1
回答内容を追記
answer
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
-
名前の衝突を避ける仕様が働いています。
|
1
|
+
Pythonの名前の衝突を避ける仕様が働いています。
|
2
2
|
|
3
3
|
```Python
|
4
4
|
print(ob.__num) # -> 321と出力
|
5
5
|
print(ob._MyObj__num) # -> 123 と出力
|
6
6
|
```
|
7
7
|
|
8
|
+
[9.6. プライベート変数](https://docs.python.org/ja/3.5/tutorial/classes.html)
|
8
9
|
> クラスのプライベートメンバについて適切なユースケース(特にサブクラスで定義された名前との衝突を避ける場合)があるので、マングリング(name mangling) と呼ばれる、限定されたサポート機構があります。 __spam (先頭に二個以上の下線文字、末尾に一個以下の下線文字) という形式の識別子は、 _classname__spam へとテキスト置換されるようになりました。ここで classname は、現在のクラス名から先頭の下線文字をはぎとった名前になります。このような難号化 (mangle) は、識別子の文法的な位置にかかわらず行われるので、クラス定義内に現れた識別子全てに対して実行されます。
|