我學習蟒蛇期運用如何看待一個計算機科學家:學習Python 3Python3 /類/ OOP /你如何用一種方法改變對象的自我價值?
我學OOP,並把一些代碼來回答書中的一個問題,但我覺得我應該有做了別的事情。
有問題的代碼是incremental()
,其目標是提高對象的價值。現在我的最終解決方案是讓我的方法成爲初始化方法的一個副本,並在那裏添加時間。
這種感覺馬虎:
class MyTime:
def __init__(self, hrs=0, mins=0, secs=0,):
""" Create a new MyTime object initialized to hrs, mins, secs.
The values of mins and secs may be outside the range 0-59,
but the resulting MyTime object will be normalized.
"""
# calculate total seconds to represent
totalsecs = hrs*3600 + mins*60 + secs
self.hours = totalsecs // 3600 # split in h, m, s
leftoversecs = totalsecs % 3600
self.minutes = leftoversecs // 60
self.seconds = leftoversecs % 60
def incerment(self,t):
# increase the time by t amount
totalsecs = self.hours * 3600 + self.minutes * 60 + self.seconds + t
self.hours = totalsecs // 3600 # split in h, m, s
leftoversecs = totalsecs % 3600
self.minutes = leftoversecs // 60
self.seconds = leftoversecs % 60
t1 = MyTime(5,5,5)
t2 = MyTime(10,10,10)
t3 = MyTime(12,12,12)
print('before:',t1)
t1.incerment(100)
print('after:',t1)
那麼怎麼樣了?
有沒有辦法清理這個?
在所有情況下都同意,除了將''totalsecs''轉換成屬性 - 它的功能與普通屬性完全相同,所以爲什麼要放入額外的函數呢?除非需要更改它,否則請將其作爲屬性保留。關於Python屬性的好處是你不需要把所有東西都變成getter和setter來保持一致的界面,就像你在某些語言中一樣。 – 2012-02-19 11:57:59
@Lattyware:好點。我剛剛得到了一些財產:)我已經更新了我的答案。 – 2012-02-19 15:00:03