有人可以解释我这种行为,为什么1)在2)和3)工作时不起作用
1)
class bm(object):
def __init__(self,val):
self.a=val
def get(self):
return self.a
def set(self,val):
self.a=val
a=property(get,set)
In [43]: ob1=bm('vin')
Run Code Online (Sandbox Code Playgroud)
给我递归错误,而下面的代码工作正常
2)
class bm(object):
def __init__(self,val):
self._a=val
def get(self):
return self._a
def set(self,val):
self._a=val
a=property(get,set)
In [43]: ob1=bm('vin')
Run Code Online (Sandbox Code Playgroud)
工作正常.我可以访问ob.a并执行ob.a =''
即使这样也可以
3)
class bm(object):
def __init__(self,val):
self.a=val
def get(self):
return self._a
def set(self,val):
self._a=val
a=property(get,set)
In [43]: ob1=bm('vin')
Run Code Online (Sandbox Code Playgroud)
工作正常.我可以访问ob.a并执行ob.a =''
在第一个示例中,您正在创建属性a,这使您可以执行以下操作:
self.a # Get the value
self.a = some_obj # Set the value
Run Code Online (Sandbox Code Playgroud)
但在a酒店内,您再次提到该a物业,通过!这将产生递归问题.self.a
在下一个示例中,属性a由变量支持,从而self._a避免了此递归问题.