class Student1(object):
@property
def score(self):
return self.score
@score.setter
def score(self,value):
if not isinstance(value,int):
return ValueError("score must be a integer")
if value < 0 or value >100:
return ValueError("score shoule between 0~100")
self.score = value
@property
def birth(self):
return self.birth
@birth.setter
def birth(self,value):
self.birth = value
@property
def age(self):
return 2017-self.births = Student1()
s = Student1()
s.score = 99
print(s.score)
在今天学习python的过程中,参照了廖雪峰教程写完如上的代码之后,系统开始报错误
[Previous line repeated 495 more times]
RecursionError: maximum recursion depth exceeded
提示循环嵌套太深,在参阅其他的资料之后,发现了一下的过程
1、再给score赋值的之后,调用了@score.setter函数,在函数的最后一句
self.score = value
发现了什么?
s.score = 99
像不像?
是的,在调用函数的时候,编译器又把self.score当做函数执行了,于是。。。就开始进入递归了
最终解决办法:
class Student1(object):
@property
def score(self):
return self.__score
@score.setter
def score(self,value):
if not isinstance(value,int):
return ValueError("score must be a integer")
if value < 0 or value >100:
return ValueError("score shoule between 0~100")
self.__score = value
@property
def birth(self):
return self.__birth
@birth.setter
def birth(self,value):
self.__birth = value
@property
def age(self):
return 2017-self.__birth
s = Student1()
s.score = 99
s.birth = 2013
print(s.score)
print(s.birth)
print(s.age)