是否用新参数返回构造函数覆盖实例对象?
问题描述:
我想模拟一个喝醉的人走路。我想让他搬家。当我呼叫移动时,我会通过返回一个新的位置告诉他移动到由X和Y坐标表示的新位置。是否用新参数返回构造函数覆盖实例对象?
我很难想象发生了什么事情。大概我需要初始化一个Location对象,如= Location(1,2)。我是否打电话给对象?那么a.move(2,2)?该方法返回一个新的Location对象,其x和y值分别为1 + 2,2 + 2或3,4?我在这里覆盖什么?
class Location(object):
def __init__(self, x, y):
"""x and y are floats"""
self.x = x
self.y = y
def move(self, deltaX, deltaY):
"""deltaX and deltaY are floats"""
return Location(self.x+deltaX, self.y+deltaY)
答
大概我需要初始化一个位置的物体,像
a = Location(1,2)
。
是的。
我是否打电话给对象?那么
a.move(2,2)
?
是的。
而且该方法返回一个新的位置对象,其x和y值分别为1 + 2,2 + 2或3,4?
是的,用你写的方法。
我在这里覆盖的东西?
不,不是用你写的方法。
你的方法并没有真正“移动”Location对象;它会创建一个新的,不同的位置对象,其中包含不同的x
和y
。这可能是也可能不是你想要的;这取决于你想要做什么。
如果您想更新现有的对象,你会写你的方法是这样的:
def move(self, deltaX, deltaY):
"""deltaX and deltaY are floats"""
self.x += deltaX
self.y += deltaY
这的确会“覆盖”目标的现有x
和y
用新值。
谢谢!我习惯用Java中的增量来思考。整个初始化语法和调用本身不是构造器的东西(Java意义上的)让我混乱。 – 2014-11-06 04:29:18