python - Getter 使用属性装饰器返回对象没有属性
问题描述
下面的代码返回AttributeError: 'Circle' object has no attribute 'r'
。我已经重读了很多遍,但看不到我遗漏了什么。你可以吗?
class Circle():
# Constructor
def __init__(self, radius):
# Control argument, raise an error(message) if <= 0
if radius <= 0:
raise ValueError('Invalid argument')
# private instance variable
self.__r = radius
# Getter
@property
def r(self):
return self.__r
# Setter
@r.setter
def r(self, radius):
if radius >= 0:
self.__r = radius
else:
raise ValueError('Radius must be larger than 0')
c = Circle(5)
print(c.r) # >> AttributeError: 'Circle' object has no attribute 'r'
解决方案
属性缩进是错误的,因为它当前是在init中定义的。
class Circle:
# Constructor
def __init__(self, radius):
# Control argument, raise an error(message) if <= 0
if radius <= 0:
raise ValueError('Invalid argument')
# private instance variable
self.__r = radius
# Getter
@property
def r(self):
return self.__r
# Setter
@r.setter
def r(self, radius):
if radius >= 0:
self.__r = radius
else:
raise ValueError('Radius must be larger than 0')
推荐阅读
- database - ORA-28040: 将数据库从 11g 升级到 12c 后
- powerbi - Power BI:如何选择 Power BI 中日期较大的所有列
- asp.net - 无法索引到 System.Xml.XPathNodeList 类型的对象
- android - 位置数据源不加载所有数据
- python - Docker Container:与其他主机的UDP通信
- ios - iOS 权限 - 理想的麦克风权限对话框文本
- c - 如何在 C 中索引(不是所有 ascii)utf8 字符串?
- html - 如何对齐 btn 内容垂直对齐
- php - 字体真棒预加载有什么问题?
- node.js - 如何修复 Node/NPM 错误:ELIFECYCLE 和 ENOENT