为什么以下构造函数的Python代码会报错?
class Student:
college = 'usa'
name = 'rahul'
#error message ?
def __init__(self):
print('new Student is entered ...')
#para cons
def __init__(self, name):
self.name = name
a = Student()
请检查我在上面的代码中犯了什么错误
5 个回答
1
Python 只会考虑第二个构造函数。
你的第二个构造函数有参数,所以在创建类的对象时需要传入参数值。
类的定义如下:
class Student:
#错误信息?
def init(self):
print('新学生已注册...')
#带参数的构造函数
def init(self, name):
self.name = name
print("第二个构造函数", name)
a = Student('rahul')
试试看!!
1
你的代码有个问题,就是在学生类(Student class)里有两个 __init__
方法。在Python中,同一个类里不能有两个同名的方法。第二个方法会把第一个方法覆盖掉。
在你的情况里,那个带有名字参数的 __init__
方法覆盖了没有参数的 __init__
方法。所以当你试图创建一个没有参数的学生对象时,Python找不到合适的 __init__
方法,就会报错,提示类型错误(TypeError)。
下面是你可以用来修复代码的方法:
class Student:
college = 'usa'
name = 'rahul'
def __init__(self, name=None):
if name is not None:
self.name = name
print('new Student is entered ...')
a = Student()
在这段代码中,__init__
方法接受一个可选的名字参数。如果在创建学生对象时提供了名字,它就把 self.name 设置为你提供的名字。否则,它会把 self.name 留作 'rahul'。
4
Python 不支持函数重载,也就是说在你的例子中,你不能定义两个不同版本的 __init__()
函数。你可以尝试把这两个版本的功能合并成一个定义,可能像这样:
class Student:
college = 'usa'
def __init__(self, name='rahul'):
self.name = name
if self.name is not 'rahul':
print('new Student is entered ...')
a = Student()