2014-11-06 50 views
0

我想模擬一個喝醉的人走路。我想讓他搬家。當我呼叫移動時,我會通過返回一個新的位置告訴他移動到由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) 

回答

2

大概我需要初始化一個位置的物體,像a = Location(1,2)

是的。

我是否打電話給對象?那麼a.move(2,2)

是的。

而且該方法返回一個新的位置對象,其x和y值分別爲1 + 2,2 + 2或3,4?

是的,用你寫的方法。

我在這裏覆蓋的東西?

不,不是用你寫的方法。

你的方法並沒有真正「移動」Location對象;它會創建一個新的,不同的位置對象,其中包含不同的xy。這可能是也可能不是你想要的;這取決於你想要做什麼。

如果您想更新現有的對象,你會寫你的方法是這樣的:

def move(self, deltaX, deltaY): 
    """deltaX and deltaY are floats""" 
    self.x += deltaX 
    self.y += deltaY 

這的確會「覆蓋」目標的現有xy用新值。

+0

謝謝!我習慣用Java中的增量來思考。整個初始化語法和調用本身不是構造器的東西(Java意義上的)讓我混亂。 – 2014-11-06 04:29:18