Python でクラス変数が処理される方法は、私には意味がありません。クラス変数のスコープはその型に依存しているようです! プリミティブ型はインスタンス変数のように扱われ、複合型はクラス変数のように扱われます。
>>> class A(object):
... my_class_primitive = True
... my_class_object = ['foo']
...
>>> a = A()
>>> a.my_class_primitive, a.my_class_object
(True, ['foo'])
>>> b = A()
>>> b.my_class_primitive, b.my_class_object
(True, ['foo'])
>>> a.my_class_object.append('bar')
>>> b.my_class_primitive, b.my_class_object
(True, ['foo', 'bar'])
>>> a.my_class_primitive = False
>>> b.my_class_primitive, b.my_class_object
(True, ['foo', 'bar'])
>>> a.my_class_primitive, a.my_class_object
(False, ['foo', 'bar'])
誰かが次のことを説明してもらえますか:
- なぜこの機能が存在するのですか? その背後にあるロジックは何ですか?
- プリミティブ型 (bool など) をクラス変数として使用したい場合、どうすればよいですか?