为什么以下构造函数的Python代码会报错?

0 投票
5 回答
57 浏览
提问于 2025-04-14 17:57
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
  1. Python 只会考虑第二个构造函数。

  2. 你的第二个构造函数有参数,所以在创建类的对象时需要传入参数值。

    类的定义如下:

    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()

撰写回答