【发布时间】:2019-01-19 21:10:06
【问题描述】:
当对象中的对象的属性发生更改时,我需要调用方法。所以我选择了属性,但没有成功。
我使用属性来检查对象中的对象是否正在发生变化。但这只会在我分配该类型的新对象或现有对象时调用 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 改变时,我需要调用 setter。
提前致谢!
【问题讨论】:
-
当您执行 player.position.x 时,您并没有设置 player.position,您只是在更改位置对象中的值。 player.position 仍然是原来的 Position 实例。 player.position = Position(10,10) 可能会按预期工作。
-
@MatthewPage 并且无法检查 X 或 Y 是否已更改?没有分配新职位?
-
抱歉,Python 还没有那么远,但理论上是的。如果 Player 扩展了 Position 类,Position 类是否会知道它的父级,我再次不确定 Python OO。 Position 类需要说“告诉我是什么创造了我我已经改变了”,通常是通过调用父级中的 message 方法..?
标签: python class properties