Перезаписывает ли возвращаемый конструктор с новыми параметрами объект экземпляра?

Я пытаюсь смоделировать идущего пьяного человека. Я хочу, чтобы он переехал. Когда я позвоню двигаться, я скажу ему переместиться в новое местоположение, обозначенное координатами X и Y, вернув новое местоположение.

У меня проблемы с визуализацией происходящего. Предположительно мне нужно инициализировать объект Location как a = Location(1,2). Я называю движение на объекте? Так что же (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)

1 ответ

Решение

Предположительно мне нужно инициализировать объект Location как a = Location(1,2),

Да.

Я называю движение на объекте? Так a.move(2,2)?

Да.

И этот метод возвращает новый объект Location со значениями x и y как 1+2,2+2 или 3,4?

Да, с тем, как вы написали метод.

Я что-то переписываю здесь?

Нет, не так, как вы написали метод.

Ваш метод на самом деле не "перемещает" объект Location; он создает новый, другой объект Location с другим x а также y, Это может или не может быть то, что вы хотите; это зависит от того, что вы хотите сделать.

Если вы хотите обновить существующий объект, вы должны написать свой метод примерно так:

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

Это действительно "перезапишет" существующий объект x а также y с новыми ценностями.

Другие вопросы по тегам