python - 程序運行會出現錯誤
問題描述
class Person(object): def __init__(self,name):self.name = nameclass Teacher(Person): def __init__(self,score):self.__score = scoreclass Student(Teacher,Person): def __init__(self,name,score):Person.__init__(self,name)super(Student,self).__init__(score) @property def score(self):return self.__score @score.setter def score(self,score):if score<0 or score >100: raise ValueError(’invalid score’)self.__score = score def __str__(self):return ’Student:%s,%d’ %(self.name,self.score)s1 = Student(’Jack’,89)s1.score = 95print s1
在運行這個程序時,只有當score是私有變量的時候才能正常運行,是property的某些特性嗎,還是什么?如果只設置為self.score = score,就會出現‘maximum recursion depth exceeded while calling a Python object’的錯誤,求大神解答
問題解答
回答1:會產生這個困惑的原因是對python的getter裝飾器和setter裝飾器不夠熟悉
當你聲明了對score屬性的setter裝飾器之后, 實際上對這個score進行賦值就是調用這個setter裝飾器綁定的方法
所以你的setter要訪問的成員變量不能和setter方法同名, 不然就相當于一個無盡的迭代:
self.score(self.score(self.score(self.score(self.score........ 無盡的迭代,
當然會報超過最大迭代深度的錯誤了
相關文章:
1. mysql儲存json錯誤2. mysql - 這種分級一對多,且分級不平衡的模型該怎么設計表?3. 在mybatis使用mysql的ON DUPLICATE KEY UPDATE語法實現存在即更新應該使用哪個標簽?4. mac OSX10.12.4 (16E195)下Mysql 5.7.18找不到配置文件my.cnf5. Navicat for mysql 中以json格式儲存的數據存在大量反斜杠,如何去除?6. mysql - 表名稱前綴到底有啥用?7. mysql - 數據庫表中,兩個表互為外鍵參考如何解決8. mysql - 數據庫建字段,默認值空和empty string有什么區別 1109. mysql - 怎么生成這個sql表?10. php - 公眾號文章底部的小程序二維碼如何統計?
