Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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_Python 3.x_Class_Object_Computer Science - Fatal编程技术网

Python 使用方法不会更改我的对象吗?

Python 使用方法不会更改我的对象吗?,python,python-3.x,class,object,computer-science,Python,Python 3.x,Class,Object,Computer Science,我做了一个方法,在时间上加上秒。例如,如果我有1小时15分钟,并且我使用了这个函数并添加了15,那么新对象应该是1小时30分钟。但是,当我在一行中执行currentTime.increment(10),然后在下一行中打印(currentTime),打印的是旧的currentTime,而不是更新的 我是新手,所以我不知道他们是否会像列表一样更新。如果我定义了一个list=[2,3,4]并添加了一个新条目,它将编辑原始列表,以便我可以print(list1),它将是带有新条目的旧列表。为什么这在这里

我做了一个方法,在时间上加上秒。例如,如果我有1小时15分钟,并且我使用了这个函数并添加了15,那么新对象应该是1小时30分钟。但是,当我在一行中执行
currentTime.increment(10)
,然后在下一行中打印(currentTime),打印的是旧的
currentTime
,而不是更新的

我是新手,所以我不知道他们是否会像列表一样更新。如果我定义了一个
list=[2,3,4]
并添加了一个新条目,它将编辑原始列表,以便我可以
print(list1)
,它将是带有新条目的旧列表。为什么这在这里不起作用,为什么它只在一个步骤中起作用,比如
print(currentTime.increment(10))


看来你是有意这么做的:

def increment(self, seconds):
    self.seconds += seconds
    return self.seconds

self
指的是实例本身—您当前正在与之交互的实例。

您似乎有意这样做:

def increment(self, seconds):
    self.seconds += seconds
    return self.seconds
def increment(self,seconds):
    return MyTime(0,0,self.to_seconds() + seconds)
self
指的是实例本身—您当前正在与之交互的实例

def increment(self,seconds):
    return MyTime(0,0,self.to_seconds() + seconds)
这不会试图修改传递到函数中的
self
对象。您确实引用了该对象,但是以只读方式引用的。您调用
以_seconds
检索对象的“seconds”版本;这个结果进入一个临时变量。然后将then
seconds
参数添加到该临时变量中。最后,将总和返回给调用程序。。。然后忽略返回的值

您需要两件事情中的一件:要么将结果存储回主程序中的
currentTime.seconds
,要么存储到方法中的
self.seconds
。在后一种情况下,不用麻烦返回值:它已经存储在需要的地方了。我推荐第二种情况

这不会试图修改传递到函数中的
self
对象。您确实引用了该对象,但是以只读方式引用的。您调用
以_seconds
检索对象的“seconds”版本;这个结果进入一个临时变量。然后将then
seconds
参数添加到该临时变量中。最后,将总和返回给调用程序。。。然后忽略返回的值


您需要两件事情中的一件:要么将结果存储回主程序中的
currentTime.seconds
,要么存储到方法中的
self.seconds
。在后一种情况下,不用麻烦返回值:它已经存储在需要的地方了。我推荐第二种情况。

为什么要丢弃递增的返回值
currentTime.increment(10)
increment()
方法创建一个新的
MyTime
对象,它不会修改
self
。您似乎对变异方法(如列表上的
append
)和复制方法(如字符串上的
replace
)之间的不同感到困惑。您已经编写了一个复制方法,但希望它像一个变异方法一样工作。你不明白其中的区别吗,或者你不明白为什么你的方法不是变异方法吗?当你得到一个解决方案时,请记住投票选出有用的东西并接受你最喜欢的答案(即使你必须自己写),所以堆栈溢出可以正确地存档这个问题。为什么要丢弃递增的返回值
currentTime.increment(10)
increment()
方法创建一个新的
MyTime
对象,它不会修改
self
。您似乎对变异方法(如列表上的
append
)和复制方法(如字符串上的
replace
)之间的不同感到困惑。您已经编写了一个复制方法,但希望它像一个变异方法一样工作。你没有得到区别,或者你不明白为什么你的方法不是一个变异的方法?当你得到一个解决方案时,请记住投票有用的东西,接受你最喜欢的答案(即使你自己写),所以堆栈溢出可以正确地存档问题。