class Geeks:
def __init__(self,value):
self._age = value
def get_age(self):
return self._age
def set_age(self, value):
self._age = value
age = property(get_age, set_age)
创建了一个类,里面的age属性由property进行管理。
boy = Geeks(10)
boy.age
10
boy.__dict__
{'_age': 10}
你看字典里面的值是_age不是age,如果修改类
class Geeks:
def __init__(self,value):
self.age = value
def get_age(self):
return self.age
def set_age(self, value):
self.age = value
age = property(get_age, set_age)
boy = Geeks(10)将无限循环。
这段代码把
age = property(get_age, set_age)
换个写法就是:这样会造成命名空间污染,当实例和类属性命名相同,且是描述符的时候,描述符在属性查找的优先级上最高。所以当你用
book = Geeks(10)
的时候,执行了self.age = value
,其实就等于一直在调用:所以你会一直不断的死循环。参考这个答案解释: https://segmentfault.com/q/1010000044061650?_ea=312080437