在使用 @property 报错 can't set attribute
时间: 2024-10-01 09:09:23 浏览: 29
当你尝试使用Python的@property装饰器设置属性值时,报"can't set attribute"错误通常意味着你正在尝试对只读属性赋值。`@property`是一个特性,它可以让一个普通的方法看起来像一个属性,但Python默认不会允许直接通过点操作符(`.`)给这种属性赋值。
例如:
```python
class MyClass:
def __init__(self):
self._private_value = None
@property
def private_value(self):
return self._private_value
@private_value.setter
def private_value(self, value):
self._private_value = value # 这里就是setter方法,用于设置值
my_instance = MyClass()
print(my_instance.private_value) # 可以获取值
# my_instance.private_value = "new_value" # 尝试设置值会抛出异常
```
在这个例子中,试图像`my_instance.private_value = "new_value"`那样直接赋值就会触发这个错误,因为`private_value`已经被声明为只读。要解决这个问题,你需要明确地调用setter方法:
```python
my_instance.private_value = my_instance.private_value + "new_value"
```
阅读全文