我正在撰寫一個類ExerciseSession,它會引入持續時間和強度,然后回傳內部方法中燃燒的卡路里。使用額外的 setter,代碼在初始呼叫時可以正常運行,但是當資料更改時,它會在 setter 更新資料后回傳型別錯誤 - int not callable。我不確定出了什么問題 - 當我逐行除錯它時,它正在正確更改資料,因此代碼應該運行。因為它確實是第一次運行,所以我確定我遺漏了一些明顯的東西。這是我的二傳手詳細資訊:
def set_exercise(self, new_name):
self.name = new_name
def set_intensity(self, new_intensity):
self.intensity = new_intensity
def set_duration(self, new_duration):
self.duration = new_duration
def calories_burned(self):
self.calories_burned = 0
if self.intensity == "Low":
self.calories_burned = str(4 * self.duration)
elif self.intensity == "Medium":
self.calories_burned = str(8 * self.duration)
elif self.intensity == "High":
self.calories_burned = str(12 * self.duration)
return self.calories_burned
再一次 - 當您對實體的更改呼叫 print 時,即使它成功更改了資料,它也會回傳錯誤。
我已經重新排序,在建構式中定義了燃燒的卡路里,甚至為燃燒的卡路里設定了一個設定器,但錯誤仍然存??在。如您所見,我什至嘗試更改型別-但隨后出現型別錯誤-str物件不可呼叫...
uj5u.com熱心網友回復:
你的錯誤就在這里:
def calories_burned(self):
self.calories_burned = 0
您已經定義了一個名為 的函式calories_burned
,但是在您第一次運行它之后,它會通過定義一個具有相同名稱的實體變數來隱藏自己。如果您再次嘗試呼叫該方法,您將嘗試呼叫整數,這會給您描述的錯誤。
為方法或屬性選擇不同的名稱。前導下劃線有時是命名內部使用的屬性的一種流行方式:self._calories_burned
. 或者,由于該屬性似乎沒有在方法主體之外的任何地方使用,您可能會考慮完全擺脫該屬性,并僅使用區域變數對: 進行計算calories_burned
,而不是self.calories_burned
. 也有點懷疑您稍后對整數和字串使用相同的變數名。Python 不要求您僅將單個型別系結到給定名稱,但這樣做通常是一個很好的設計,只要您始終知道它包含什么型別而不會產生任何歧義。
uj5u.com熱心網友回復:
“型別錯誤 - str 物件不可呼叫...”可能意味著您已在此代碼段之前的代碼中覆寫了“str”函式。您可以嘗試print(str)
或print(int)
讓我們知道它說什么嗎?如果您附加整個代碼,也可能更容易找到問題。我沒有注意到您在此處共享的代碼段有任何問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/487139.html
下一篇:更改繼承類的成員變數