python - Python 类@property RecursionError
问题描述
我想@property
命名image
它,如果它存在就简单地返回它,否则我会做一些事情,然后将它分配给一个变量,然后返回它。
class MyClass:
def __init__(self, name: str):
self.name = name
@property
def image(self):
if self.image:
return self.image
# Some code
self.image = 'image url'
return self.image
错误信息 :
in image
if self.image: return self.image
[Previous line repeated 996 more times]
RecursionError: maximum recursion depth exceeded
解决方案
您不能单独使用self.image
,它会调用您正在处理的功能。这是因为通过定义该函数@property
,当您尝试访问该属性myClassObj.image
时,它实际上将通过调用您的函数来工作image()
。因此,当您访问self.image
内部时,这就是递归发生的地方。
TL;DR:不要访问函数self.image
内部image
。
将实际图像存储为self._image
或类似的东西:
class MyClass:
def __init__(self, name: str):
self.name = name
@property
def image(self):
if self._image:
return self._image
# Some code
self._image = 'image url'
return self._image
推荐阅读
- c++ - C++ 使用 list.remove() 在多线程使用时会导致分段错误
- python - “ValueError: Structure is a scalar but len(flat_sequence) == 0 > 1” 保存 Keras 模型时
- css - 在 flexbox 内滚动超过阈值后,如何修复 Safari 中的粘性损失?
- amazon-web-services - How to empty Amazon S3 Bucket using AWS Java SDK?
- python - 如何解析 JSON 模式文件并使用许多列约束动态创建新的 Python 类?
- c++ - vector bool 编译器异或特化?
- postgresql - 从 Azure RDS 到 AWS RDS 的 Postgres FDW 连接问题
- python - 如何找到字符串中出现次数最多的 5 个字母?
- c++ - 是否可以添加/减去从数据文件中读取的数组?
- c# - 如何在不使用 Photon View Id 的情况下生成/实例化多个游戏对象?