创建类时的属性错误

时间:2014-11-02 15:54:03

标签: python

这个例子写在“计算简介”中。 John V. Guttag使用Python编程

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)

我收到错误:

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'

3 个答案:

答案 0 :(得分:2)

您的构造函数应为__init__,每边有两个下划线_。因为你遗漏了那些Python无法找到s= IntSet()上的构造函数,因此从未创建self.vals变量。 Python类的所有“魔术方法”都具有相同的格式,每侧有两个下划线_,详细内容为here

答案 1 :(得分:0)

撰写__init__代替_init_

答案 2 :(得分:0)

对于初学者来说,你并没有真正覆盖初始值设定项(__init__),因为你在每一侧都使用了单个下划线而不是双下划线,所以你几乎只创建了另一个名为&#34; _init _&#34;

因此,当您运行代码时,您使用默认对象初始值设定项来实例化IntSet。 只需将_init_更改为__init__即可。

E.G。

class IntSet(object):
  def __init__(self):
    self.vals = []
  .
  .
  .
  (rest of code)