用于更改对象中的对象属性的属性

时间:2019-01-19 21:10:06

标签: python class properties

当对象内对象的属性更改时,我需要调用一个方法。所以我选择了物业,但没有成功。

我使用属性来检查对象内的对象是否正在更改。但这仅在我分配该类型的新对象或现有对象时才调用setter,而当我在其中更改属性时则不会。

class Position:
    def __init__(self):
        self.x = 0
        self.y = 0

class Player:
    def __init__(self, x, y):
        self.__position = Position()
        self.__position.x = x
        self.__position.y = y

    @property
    def position(self):
        return self.__position

    @position.setter
    def position(self, value):
        print('Position changed')
        self.__position = value

player = Player(5, 10)
player.position = Position() # Setter gets called
player.position.x = 10 # Setter doesn't get called

当前,该示例在player.position = Position()行中一次打印“位置已更改”。但是当X或Y更改时,我需要打电话给二传手。

谢谢!

1 个答案:

答案 0 :(得分:1)

  

问题:当X或Y更改时,我需要致电二传手。

如果您想了解情况,如果xy被更改,请使用x.settery.setter

例如:

@x.setter
def x(self, value):
    print('Position X changed')
    self.__position.x = value
  

用法

player.x = 10