这个例子是在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'发布于 2014-11-02 15:56:19
编写__init__而不是_init_
发布于 2014-11-02 15:56:39
构造函数应该是__init__,两边各有两个下划线_。因为忽略了这些,Python无法在s= IntSet()上找到构造函数,因此从未创建self.vals变量。Python类的所有“神奇方法”都具有相同的格式,每端都有两个下划线_,作为详细的这里。
发布于 2014-11-02 16:00:34
首先,您实际上并没有覆盖初始化器(__init__),因为您使用的是单个下划线,而不是两边的双下划线,因此您实际上只是创建了一个名为"_init_“的额外方法。
因此,在运行代码时,使用默认的对象初始化程序实例化IntSet。只需将_init_更改为__init__就可以了。
例如:
class IntSet(object):
def __init__(self):
self.vals = []
.
.
.
(rest of code)https://stackoverflow.com/questions/26701223
复制相似问题