首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建类时出现属性错误

创建类时出现属性错误
EN

Stack Overflow用户
提问于 2014-11-02 15:54:02
回答 3查看 199关注 0票数 0

这个例子是在John V. Guttag编写的“使用Python进行计算和编程入门”中编写的。

代码语言:javascript
复制
class IntSet(object):
        def _init_(self): 
              self.vals= [] 
        #Rest of the code is fine 

        def insert(self,x): 
              if not x in self.vals:
                    self.vals.append(x)


s= IntSet() 
s.insert(3)

我收到一个错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "/Users/abhimanyuaryan/Python/Classes/main.py", line 43, in <module>
    s.insert(3)
  File "/Users/abhimanyuaryan/Python/Classes/main.py", line 13, in insert
    if not e in self.vals:
AttributeError: 'IntSet' object has no attribute 'vals'
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-02 15:56:19

编写__init__而不是_init_

票数 0
EN

Stack Overflow用户

发布于 2014-11-02 15:56:39

构造函数应该是__init__,两边各有两个下划线_。因为忽略了这些,Python无法在s= IntSet()上找到构造函数,因此从未创建self.vals变量。Python类的所有“神奇方法”都具有相同的格式,每端都有两个下划线_,作为详细的这里

票数 2
EN

Stack Overflow用户

发布于 2014-11-02 16:00:34

首先,您实际上并没有覆盖初始化器(__init__),因为您使用的是单个下划线,而不是两边的双下划线,因此您实际上只是创建了一个名为"_init_“的额外方法。

因此,在运行代码时,使用默认的对象初始化程序实例化IntSet。只需将_init_更改为__init__就可以了。

例如:

代码语言:javascript
复制
class IntSet(object):
  def __init__(self):
    self.vals = []
  .
  .
  .
  (rest of code)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26701223

复制
相关文章

相似问题

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