Python class @属性 递归错误

Python class @property RecursionError

我想让 @property 命名为 image ,如果它只存在 return ,否则我会做一些事情然后将它分配给一个变量然后 return它。

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:不要在 image 函数中访问 self.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