使用Python属性时,您可能会发现“调用Python对象时超出了最大递归深度”错误。 这是将导致此错误的代码示例:
class Person:
def __init__(self, name):
self.name = name
def set_name(self, name):
self.name = name
def get_name(self):
return self.name
name = property(get_name, set_name)
serena = Person('Serena')
我们已经使用property()函数来告诉Python,获取self.name值的方法是调用get_name()函数。但是在get_name()函数中,我们尝试返回self.name。 为了找出self.name的值,Python再次调用get_name()函数,该函数再次尝试返回self.name。我们发现自己陷入了无尽的循环:
解决方法是使用伪私有属性:_name,并使用get_name()检索self._name,并使用set_name()设置self._name,如下所示:
class Person:
def __init__(self, name):
self._name = name
def set_name(self, name):
self._name = name
def get_name(self):
return self._name
name = property(get_name, set_name)
serena = Person('Serena')
print(serena.name)
serena.name = 'Serena Williams'
print(serena.name)
这将打印:
Serena
Serena Williams
学点编程吧原创翻译,转载请注明出处!
最近在备课的过程中发现了一个非常好的东西分享给大家。作者是谁当时没有记录下来。 就是下面这张图,通过一张思维导图对Python3能有一个初步的了解。建议大家保存在电脑上再看比较方便。 如需高清图,直接...
03月05日
2,755
根据互联网上相关文章综合整理。 .py 文件 以 .py 作扩展名的文件是 Python 源代码文件,由 python.exe 解释,可在控制台下运行。可用文本编辑器进行修改。 .pyc...
08月18日
5,405
作者:我会吹 本期课程掌握的知识点: 计算机的发展历史:电子管、晶体管、集成电路、大规模集成电路 程序语言的发展历史:机器语言、汇编语言、高级语言 编程能提高我们的效率,让我们生活得更好...
03月20日
2,953