0

コードがあります:

class A:  
  @staticmethod
  def g():
    A.__z = 4

print(dir(A))
A.g()
print(dir(A)) # A has attribute _A__z
A.__m = 5
print(dir(A)) # A has attribute _A__z and __m

名前__mがマングルされていない_A__mのはなぜ__zですか?

4

2 に答える 2

2

Python のチュートリアルでは次のように説明されています。

このマングリングは、クラスの定義内で発生する限り、識別子の構文上の位置に関係なく行われます。

class名前マングリングは、構文的にステートメント内にあるコードのコンパイル時に発生します。classステートメント外のコードでは発生しません。classステートメントの外部で定義され、クラス オブジェクトに追加された関数内のコードでは発生しません。ステートメント内のexecまたはeval呼び出しによって動的に実行されるコードでは発生しません。class

于 2013-05-25T12:45:18.457 に答える
0

まさにクラス外で宣言したため、クラス内で名前マングリングが発生します。

于 2013-05-25T12:44:57.660 に答える