“_这个构造函数没有参数”__init__中的错误

时间:2012-09-16 16:03:13

标签: python python-3.x

运行以下代码时出错:

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 个答案:

答案 0 :(得分:48)

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

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

答案 1 :(得分:9)

__init__使用双下划线。

class Person:
  def __init__(self, name):

(Python中的所有special methods以双重而非单个下划线开头和结尾。)

答案 2 :(得分:3)

您应该使用双下划线(__init__)( Python中的Dunder或magic方法)来声明python构造函数。

Basic customization:

__init____new__创建实例之后调用,并用于自定义创建的对象。

在实例创建后(由 new ())调用,但在实例返回给调用者之前调用。参数是传递给类构造函数表达式的参数。如果基类具有 init ()方法,则派生类的 init ()方法(如果有)必须显式调用它,以确保正确初始化基类的一部分。实例;例如:super()。初始([args ...])。

因为 new ()和 init ()在构造对象( new ()创建对象,然后 init ()进行自定义), init ()不会返回任何非值;这样做将导致在运行时引发TypeError。

在python中,我们有两种类型的 Constructor

  • 默认构造函数:,当您不声明参数化构造函数时使用。它的定义只有一个参数,该参数引用正在构造的实例(也称为self)。
def __init__(self):
    # default constructor 
  • 参数化的构造函数:,该参数除了self参数之外还接受其他参数。
def __init__(self, parameters):
    # parameterized constructor 

如果不声明参数化构造函数,则python使用默认的构造函数,该构造函数不接受任何参数。因此,您将一个参数传递给默认构造函数,并且已引发异常。

如何解决?

只需声明一个参数化的构造函数,即可通过该实例化实例。

Python3:

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