teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

回答内容を追記

2019/05/14 05:21

投稿

mar-kn
mar-kn

スコア306

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) は、識別子の文法的な位置にかかわらず行われるので、クラス定義内に現れた識別子全てに対して実行されます。