Pythonでは、内のクラス変数の現在の値にがアクセスできるのでしょうか?例えばセッターのプロパティの現在値へのアクセス
:C#で
# Getter
@property
# ...
# Setter
@position.setter
def position(self, value):
# Do something with current value...
# self.position, self.__position, position and __position don't seem to work
# Update position with the given value
self.__position = value
# Do something with the new value...
相当するものは次のようになります。
private Position position;
public Position Position
{
get
{
// ...
}
set
{
// Do something with the current value...
// Update position field with given object
position = value;
// Do something with the new value...
}
}
更新
ここでは、より良い私の質問を説明するために、最小限の完全な、かつ検証例です。
class C:
def __init__(self):
self.x = 2
@property
def x(self):
return self.__x
@x.setter
def x(self, value):
print(self.x)
self.__x = value
print(self.x)
c = C()
次のエラーがスローされます。x
があり、その時点で
AttributeError: 'C' object has no attribute '_C__x'
セッターはそれを更新する前に、変数の現在の値を印刷しようとするので、これが発生し、x
が__init__
内の2に設定されているときにセッターが実行され、以前に値が割り当てられていない(印刷する現在の値はありません)。
:同じ結果が得られ
をあなたは*「うまくいかない」*を意味しますか?あなたがそれに割り当てられるまで、 'self .__ position'は依然として古い値であり、' self.position'もまた古い値にアクセスします。 – jonrsharpe
それは私が考えていたものですが、セッター内で 'self.position'または' self .__ position'にアクセスしようとすると、次のエラーが発生します: 'AttributeError: 'GameObject'オブジェクトに '_GameObject__position''属性がありません。 ( 'GameObject'は' position'変数を含むクラスです) – Ruben9922
[mcve]を付けてください。また、manglingが名前を不必要に複雑にするので、 '__double_underscore'を削除することを検討してください。 – jonrsharpe