luofeiyu_cu 发表于 2014-08-21 15:45

为何无法实例化?

class Person(object):
   def __init__(self, name):
         self._name = name
   def getName(self):
         print('fetch....')
         return self._name
   def setName(self, value):
         print('change...')
         self._name = value
   def delName(self):
         print('remove....')
         del self._name
   _name = property(getName, setName, delName, "name property docs")

x=Person("bob")

File "<stdin>", line 9, in setName
File "<stdin>", line 9, in setName
File "<stdin>", line 9, in setName
File "<stdin>", line 8, in setName
RuntimeError: maximum recursion depth exceeded while calling a Python object

为何无法实例化?我们来分析执行过程,
解释器对这个指令x=Person("bob") 的第一个步骤是执行初始化
def __init__(self, name):
         self._name = name

由于有_name = property(getName, setName, delName, "name property docs") 这个定义,self._name = name触发setName ,
此时    def setName(self, value):
         print('change...')
         self._name = value

这里有点想不通了,请指点一下,多谈谈机理。

r2007 发表于 2014-08-21 20:50

self._name = ...反过来又触发 setName,死循环了。
name = property(getName, setName, delName, "name property docs")
不要用_name

luofeiyu_cu 发表于 2014-08-21 21:20

美女一点,我通了,谢谢
页: [1]
查看完整版本: 为何无法实例化?