私はPythonで次のクラスを定義します。Classインスタンスの奇妙な振る舞い - 内部変数の更新時
class test():
def __init__(self):
self.x = 0
self.y = self.x ** 2
def check(self):
self.x = self.x + 1
print self.x
print self.y
ここでは、2つの内部変数xとyがあります。初期化では、$$ y = x^2 $$を設定しています。今度は、メソッドcheck()
を呼び出すたびに、xの値を1ずつ増やします(self.x = self.x + 1
)。しかし、私が値を印刷するとき、xは1だけ増分されますが、yは常に0のままです。 (それはx^2になるべきではない?)どうしたの?
何も問題はありません。インスタンスを初期化した後に 'self.y'を変更することはないので、常に同じ値を保持します。 – kindall
Ned Batchelderの「[Pythonの名前と値についての事実と誤解](http://nedbatchelder.com/text/names1.html)」(26分[PyCon US 2015からのビデオ](https:// www。 youtube.com/watch?v=_AEJHKGk9ns))では、Pythonの変数や代入文が他のほとんどの言語と全く同じように機能しないというクラッシュコースがあります。 (具体的には、名前は常に値を参照し、_neverは式や他の名前を参照します)。 –