擅长:python、mysql、java
<p>这是因为类中的代码正在运行一个无限循环</p>
<pre><code>class Person:
def __init__(self, n):
self.name = n
def get_name(self):
return self.name
def set_name(self, n):
self.name = n
name = property(get_name, set_name)
p = Person('Lewis')
p.name = 'Philo'
</code></pre>
<p>应该是:</p>
<pre><code>class Person:
def __init__(self, n):
self.name = n
def get_name(self):
return self._name
def set_name(self, n):
self._name = n
name = property(get_name, set_name)
p = Person('Lewis')
p.name = 'Philo'
</code></pre>
<p>额外的<code>_</code>是为了避免运行无限循环。请参见,无论何时使用提供的代码设置或获取名称,它都会永远运行<code>set_name</code>或<code>get_name</code>,因为您正在getter或setter方法中设置或获取名称</p>
<p>例如,使用<code>p.name = 'Philo'</code>,您正在运行setter方法。但是,在setter方法中,使用<code>self.name = n</code>一次又一次地调用setter方法,并且执行<code>self._name = n</code>可以防止Python出现无限循环</p>