クラスから__variables
にアクセスしようとすると、パーサーは2つのアンダースコアが現在のクラスに対してプライベートであるとみなします。無関係の関数が "private"変数を取得する方法に注目してください。クラス変数ではないPythonプライベートクラス変数
これはバグですか?
>>> def f(): pass ... >>> class A: ... def g(self): ... f.__x = 1 ... def h(): ... pass ... h.__y = 2 ... return h ... >>> z = A().g() >>> dir(z) ['_A__y', '__call__', '__class__', '__delattr__', '__dict__', '__doc__', '__get_ _', '__getattribute__', '__hash__', '__init__', '__module__', '__name__', '__new __', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 'func_ closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name'] >>> dir(f) ['_A__x', '__call__', '__class__', '__delattr__', '__dict__', '__doc__', '__get_ _', '__getattribute__', '__hash__', '__init__', '__module__', '__name__', '__new __', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 'func_ closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name']のPython 2.5でテスト
3.2
期待どおりに動作します。確かに、彼らと一緒にやっていることは普通ではありませんが、それらの属性はどこにいてもクラスに属します。 – kwatford