Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 返回带有新参数的构造函数是否覆盖实例对象?_Python_Oop_Object_Return - Fatal编程技术网

Python 返回带有新参数的构造函数是否覆盖实例对象?

Python 返回带有新参数的构造函数是否覆盖实例对象?,python,oop,object,return,Python,Oop,Object,Return,我试着模仿一个醉汉走路。我要他离开。当我调用move时,我会告诉他通过返回一个新位置,移动到一个由X和Y坐标表示的新位置 我很难想象发生了什么。大概我需要初始化一个Location对象,比如a=Location(1,2)。我要在对象上调用move吗?那么a.移动(2,2)?该方法返回一个新的Location对象,其x和y值为1+2,2+2或3,4?我在这里重写什么吗 class Location(object): def __init__(self, x, y): """

我试着模仿一个醉汉走路。我要他离开。当我调用move时,我会告诉他通过返回一个新位置,移动到一个由X和Y坐标表示的新位置

我很难想象发生了什么。大概我需要初始化一个Location对象,比如a=Location(1,2)。我要在对象上调用move吗?那么a.移动(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)
大概我需要初始化一个Location对象,比如
a=Location(1,2)

我要在对象上调用move吗?所以
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)
不,不是你写方法的方式

您的方法不会真正“移动”位置对象;它使用不同的
x
y
创建一个新的、不同的位置对象。这可能不是你想要的;这取决于你想做什么

如果要更新现有对象,可以编写如下方法:

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

这确实会用新值“覆盖”对象的现有
x
y

谢谢!我习惯用Java的增量思维。整个init语法和调用本身不是构造函数的东西(在Java意义上)让我感到混乱。