这个例子写在“计算简介”中。 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'
答案 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)