私はC++の世界から来ているので、これは何時間も私を悩ませました。私はついに何が起こっているのかを知りましたが、なぜこれがデフォルトの動作であるのかわかりません。言語がこのように設計されている理由を理解したいと思います。
インスタンス変数が必要mem
でした。だから私はこれを試しました:
class x(object):
mem = []
obj = x()
obj.mem.append(1)
print(obj.mem)
objTWO = x()
objTWO.mem.append(2)
print(objTWO.mem)
これを印刷します:
[1]
[1, 2]
一方:
class x(object):
def __init__(self):
self.mem = []
obj = x()
obj.mem.append(1)
print(obj.mem)
objTWO = x()
objTWO.mem.append(2)
print(objTWO.mem)
プリント
[1]
[2]
なぜ最初がデフォルトの動作になるのでしょうか?ここでの直感は何ですか?主流のオブジェクト指向言語の数とは逆です(static
静的変数が必要であると明示的に言う、トップケースのキーワードを導入しています)?Pythonの初心者にとって、これは驚きです。
また、同じ名前のインスタンス変数とクラス変数を持つことが許可されているようです。
class x(object):
mem = []
def __init__(self):
self.mem = []
何が印刷されるかを理解するためにこれを実行する必要があります。推測すらできない!