回答編集履歴
2
些細
answer
CHANGED
@@ -68,4 +68,4 @@
|
|
68
68
|
かわりにこれと等価になるように`__dict__`にセットするコードを書こうとすると、そこでセットするべき名前はname-manglingの仕様で**変換された後の名前**でなければなりません。
|
69
69
|
|
70
70
|
ゆえにダブルアンダースコア名のためname-manglingの再生成が必要
|
71
|
-
|
71
|
+
はそういう意味です。
|
1
引用を変更
answer
CHANGED
@@ -57,10 +57,9 @@
|
|
57
57
|
Pythonではname-manglingで解決します。
|
58
58
|
ここはこれ以上解説しません。公式ドキュメントからの引用にとどめます。
|
59
59
|
|
60
|
-
[https://docs.python.org/ja/3/
|
60
|
+
[https://docs.python.org/ja/3/tutorial/classes.html#private-variables](https://docs.python.org/ja/3/tutorial/classes.html#private-variables)
|
61
|
+
> クラスのプライベートメンバについて適切なユースケース(特にサブクラスで定義された名前との衝突を避ける場合)があるので、名前マングリング (name mangling) と呼ばれる、限定されたサポート機構があります。 `__spam` (先頭に二個以上の下線文字、末尾に一個以下の下線文字) という形式の識別子は、 `_classname__spam` へとテキスト置換されるようになりました。
|
61
62
|
|
62
|
-
> クラス定義内に書かれた識別子で、2つ以上のアンダースコアから始まり、末尾が2つ以上のアンダースコアで終わっていないものは、そのクラスの プライベートな名前 とみなされます。プライベートな名前は、コードが生成される前により長い形式に変換されます。この変換によって、クラス名の先頭にアンダースコアがあれば除去し、先頭にアンダースコアを1つ付加し、名前の前に挿入されます。例えば、クラス名 Ham の中の識別子 `__spam` は、`_Ham__spam` に変換されます。
|
63
|
-
|
64
63
|
今
|
65
64
|
```python
|
66
65
|
self.__methods = {}
|