2012-09-16 33 views
24

同时运行下面的代码我得到一个错误的错误:“这个构造函数没有参数”,在__init__

class Person: 
    def _init_(self, name): 
    self.name = name 

    def hello(self): 
    print 'Initialising the object with its name ', self.name 

p = Person('Constructor') 
p.hello() 

输出是:

Traceback (most recent call last): 
    File "./class_init.py", line 11, in <module> 
    p = Person('Harry') 
TypeError: this constructor takes no arguments 

什么问题?

+3

答案人士指出,'__init__'使用双下划线。但是你得到错误信息的原因是默认情况下,你的类提供了一个从'object'继承的空'__init __(self)'方法。既然你没有重写这个方法,那就是被调用的方法。 –

+0

在类似的拼写错误的情况下(在这种情况下,单个下划线而不是两个)我通过命名方法'__ini__'落入了同样的错误 – Salam

回答

39

的方法应该被命名为__init__是一个构造函数,而不是_init_。 (注意双下划线。)

如果使用单下划线,则只需创建一个名为_init_的方法,并获取默认构造函数,该函数不接受任何参数。

8

对于__init__使用双下划线。

class Person: 
    def __init__(self, name): 

(所有的Python special methods开始,以双,不是单一的,强调结束。)

+1

[Here](http://stackoverflow.com/a/3443428/1322401)is Python如何使用双下划线。 –

-7
class Robots: 
    def __init__(self,subject): #add double underscores,on both sides. 

提示用Python方法豁然开朗查找在这个documentation

+8

这个答案没有添加新的信息,代码有2个语法错误(和非常非标准的缩进)。 –