Python:为什么我会遇到 @Property 以及 getter 和 setter 的递归错误

问题描述 投票:0回答:1

Alphabet2 类: def init(自身,值): 自我价值=价值

@property
def value(self): 
    return self.value      

@value.setter       
def value(self, value):
    self.value = value

@value.deleter     
def value(self):
    del self.value   

T = Alphabet2(“单词”)

回溯(最近一次调用最后一次):
文件“c:\Users\”中 T = Alphabet2("单词") ^^^^^^^^^^^^^^^^^^^^^^^ 文件“c:\Users\”在init 自我价值=价值 ^^^^^^^^^^ 文件“c:\Users\”的值 自我价值=价值 ^^^^^^^^^^ 文件“c:\Users\ 第 1902 行,值为 自我价值=价值 ^^^^^^^^^^ 文件“c:\Users\ 第 1902 行,值为 自我价值=价值 ^^^^^^^^^^ [上一行又重复了 994 次] RecursionError:超出最大递归深度

您好,我知道如何解决这个问题并且熟悉递归,但我正在寻找这个错误背后的逻辑和直觉,因为涉及递归,有人可以解释这里发生了哪个调用或函数,到底发生了什么。让我失望的是它引用的是 self.attribute 但这实际上并不是一个函数调用。无法在更多后端级别找到有关此内容的文档?有什么想法吗?

python python-3.x function class python-decorators
1个回答
0
投票
@property
def value(self): 
    return self.value      

@value.setter       
def value(self, value):
    self.value = value

@value.deleter     
def value(self):
    del self.value 

这不是你应该使用的方式

property
,首先,只有当你想要只读属性时,你才应该使用属性作为装饰器,更重要的是,装饰方法和存储值的属性之间应该有区别,观察在文档示例中

class Parrot:
    def __init__(self):
        self._voltage = 100000

    @property
    def voltage(self):
        """Get the current voltage."""
        return self._voltage

_voltage
voltage
,否则你将以无限递归结束。

© www.soinside.com 2019 - 2024. All rights reserved.