【发布时间】:2018-12-25 17:50:32
【问题描述】:
我做了一个方法来增加时间。例如,如果我有 1 小时 15 分钟,并且我使用此函数并添加了 15,则新对象应为 1 小时 30 分钟。但是,当我在一行中执行currentTime.increment(10),然后我在下一行执行print(currentTime) 时,打印的是旧的currentTime,没有更新。
我是新的课程,所以我不知道他们是否会像列表一样更新。如果我定义了 list = [2,3,4] 并附加了一个新条目,它将编辑原始列表,以便我可以 print(list1) 并且它将是带有新条目的旧列表。为什么这在这里不起作用,为什么它只有在我一步完成时才起作用,比如print(currentTime.increment(10))?
class MyTime:
""" Create some time """
def __init__(self,hrs = 0,mins = 0,sec = 0):
"""Splits up whole time into only seconds"""
totalsecs = hrs*3600 + mins*60 + sec
self.hours = totalsecs // 3600
leftoversecs = totalsecs % 3600
self.minutes = leftoversecs // 60
self.seconds = leftoversecs % 60
def to_seconds(self):
# converts to only seconds
return (self.hours *3600) + (self.minutes *60) + self.seconds
def increment(self,seconds):
return MyTime(0,0,self.to_seconds() + seconds)
currentTime = MyTime(2,3,4)
currentTime.increment(10)
print(currentTime) # this gives me the old currentTime even after I increment
print(currentTime.increment(10)) # this gives me the right answer
【问题讨论】:
-
为什么要把
currentTime.increment(10)的递增返回值扔掉?increment()方法创建一个新的MyTime对象,它不会修改self。 -
您似乎对变异方法(如列表中的
append)和复制方法(如字符串中的replace)之间的区别感到困惑。您已经编写了一个复制方法,但您希望它能够像变异方法一样工作。你不明白区别,还是不明白为什么你的方法不是变异方法? -
当你得到解决方案时,请记得给有用的东西投票并接受你最喜欢的答案(即使你必须自己写),这样 Stack Overflow 才能正确存档问题。跨度>
标签: python python-3.x class object computer-science