Python &引用;此构造函数不接受任何参数";初始化时出错__
运行以下代码时出现错误:Python &引用;此构造函数不接受任何参数";初始化时出错__,python,python-3.x,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 "./clas
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
回溯(最近一次呼叫最后一次):
文件“/class_init.py”,第11行,在
p=人(“哈里”)
TypeError:此构造函数不接受任何参数
有什么问题吗?对
\uuuu init\uuuu
使用双下划线
class Person:
def __init__(self, name):
(Python中的所有字符都以双下划线开始和结束,而不是单下划线。)对
\uuuu init\uuuu
使用双下划线
class Person:
def __init__(self, name):
(在Python中,所有方法的开头和结尾都是双下划线,而不是单下划线。)该方法应命名为
\uuuu init\uuuu
作为构造函数,而不是\uu init
。(请注意双下划线。)
如果使用单下划线,只需创建一个名为
\u init\u
的方法,并获得一个默认构造函数,该构造函数不带参数。该方法应命名为\u init\u
作为构造函数,而不是\u init\u
。(请注意双下划线。)
如果使用单下划线,只需创建一个名为
\u init\u
的方法,并获得一个不带参数的默认构造函数。应该使用双下划线(\u init\u
)(Dunder或python中的magic methods)来声明python构造函数
\uuuuu init\uuuuuuuu
创建实例后调用,用于自定义创建的对象
在创建实例之后(通过new())调用,但在实例返回给调用方之前调用。参数是传递给类构造函数表达式的参数。如果基类具有init()方法,则派生类的init()方法(如果有)必须显式调用它,以确保实例的基类部分正确初始化;例如:super().init([args…])
由于new()和init()在构造对象时一起工作(new()创建对象,而init()自定义对象),因此init()不能返回非无值;这样做将导致在运行时引发TypeError
python中有两种类型的构造函数:
- 默认构造函数:在不声明参数化构造函数时使用。它的定义只有一个参数,它是对正在构造的实例的引用(也称为self)
def\uuuu初始化(自):
#默认构造函数
- 参数化构造函数:除了
参数之外,还接受其他参数self
def\uuuuu init\uuuuuu(自身,参数):
#参数化构造函数
如果不声明参数化构造函数,python将使用默认构造函数,该构造函数不接受任何参数。因此,您向默认构造函数传递了一个参数,并引发了异常
如何修复它?
只需声明一个参数化构造函数,通过它可以实例化实例
蟒蛇3:
班级人员:
定义初始化(self,name):
self.name=名称
您应该使用双下划线(\uuuu init\uuuu
)(Dunder或python中的magic方法)来声明python构造函数
\uuuuu init\uuuuuuuu
创建实例后调用,用于自定义创建的对象
在创建实例之后(通过new())调用,但在实例返回给调用方之前调用。参数是传递给类构造函数表达式的参数。如果基类具有init()方法,则派生类的init()方法(如果有)必须显式调用它,以确保实例的基类部分正确初始化;例如:super().init([args…])
由于new()和init()在构造对象时一起工作(new()创建对象,而init()自定义对象),因此init()不能返回非无值;这样做将导致在运行时引发TypeError
python中有两种类型的构造函数:
- 默认构造函数:在不声明参数化构造函数时使用。它的定义只有一个参数,它是对正在构造的实例的引用(也称为self)
def\uuuu初始化(自):
#默认构造函数
- 参数化构造函数:除了
参数之外,还接受其他参数self
def\uuuuu init\uuuuuu(自身,参数):
#参数化构造函数
如果不声明参数化构造函数,python将使用默认构造函数,该构造函数不接受任何参数。因此,您向默认构造函数传递了一个参数,并引发了异常
如何修复它?
只需声明一个参数化构造函数,通过它可以实例化实例
蟒蛇3:
班级人员:
定义初始化(self,name):
self.name=名称
这就是Python使用双下划线的原因。是Python使用双下划线的方式。答案指出,\uuuu init\uuu
使用双下划线。但是,您得到错误消息的原因是,默认情况下,您的类提供了一个从对象继承的空\uuuu init\uuuuu(self)
方法。由于您没有重写该方法,因此调用了该方法。对于类似的打字错误(在本例中是一个下划线而不是两个下划线),我也犯了同样的错误,将方法命名为\uu ini\uu
,答案为