Python 创建类时出现属性错误

Python 创建类时出现属性错误,python,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.v

这个例子是由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'
回溯(最近一次呼叫最后一次):
文件“/Users/abhimanyuaryan/Python/Classes/main.py”,第43行,在
s、 插入(3)
文件“/Users/abhimanyuaryan/Python/Classes/main.py”,第13行,插入
如果self.vals中没有e:
AttributeError:“IntSet”对象没有属性“VAL”

Write
\uuuu init\uuuu
而不是
\uu init\uuu

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

对于初学者,您实际上并没有重写初始值设定项(\uuuu init\uuuu),因为您在每侧使用了单下划线而不是双下划线,所以实际上只是创建了一个名为“\u init\uu”的附加方法

因此,在运行代码时,可以使用默认的对象初始值设定项来实例化IntSet。 只要把_init uu改为u init uu u u u u u u u u u u u u u

例如


oops感谢您的帮助…您还可以告诉我为什么对象在IntSet类中作为参数传递吗?@codejam.tk这不是参数,而是超类。你试过阅读或类似的东西吗?
class IntSet(object):
  def __init__(self):
    self.vals = []
  .
  .
  .
  (rest of code)