首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python3 @Property.setter和Object没有属性

Python3 @Property.setter和Object没有属性
EN

Stack Overflow用户
提问于 2013-04-29 12:36:13
回答 1查看 6.1K关注 0票数 3

我正在学习使用Python的对象,"the Quick Python Book“第二版。我使用的是Python 3

我正在尝试学习@属性以及该属性的setter。从第199页到第15页,它有一个我尝试过的例子,但得到了错误:

代码语言:javascript
复制
>>> class Temparature:
    def __init__(self):
        self._temp_fahr = 0
        @property
        def temp(self):
            return (self._temp_fahr - 32) * 5/9
        @temp.setter
        def temp(self, new_temp):
            self._temp_fahr = new_temp * 9 / 5 + 32


>>> t.temp
Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    t.temp
AttributeError: 'Temparature' object has no attribute 'temp'
>>> 

为什么我会得到这个错误?另外,为什么我不能直接使用函数调用和参数来设置实例变量new_temp,如下所示:

代码语言:javascript
复制
t = Temparature()
t.temp(34)

而不是

代码语言:javascript
复制
t.temp = 43
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-29 12:43:22

您已经在__init__方法中定义了所有方法!只需像这样取消缩进:

代码语言:javascript
复制
class Temparature:
    def __init__(self):
        self._temp_fahr = 0

    @property
    def temp(self):
        return (self._temp_fahr - 32) * 5/9
    @temp.setter
    def temp(self, new_temp):
        self._temp_fahr = new_temp * 9 / 5 + 32

代码语言:javascript
复制
t.temp(34)

不起作用,因为属性是descriptors,并且在本例中它们具有查找优先级,因此t.temp返回您定义的@property

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16271245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档