为何以下Python构造函数代码执行报错?请排查代码问题
Python构造方法报错问题排查与修复
问题原因
Python不支持方法重载——同一个类里定义多个同名方法时,后定义的会直接覆盖前面的。你代码里带name参数的__init__方法把无参的__init__给覆盖了,所以调用Student()的时候,实际调用的是需要传name参数的构造方法,自然会因为缺参数报错。
修复方法
如果要同时支持无参和带参创建实例,给name参数加个默认值就行,两种调用方式都能兼容:
class Student: college = 'usa' name = 'rahul' def __init__(self, name=None): # 只有传入name时才覆盖属性 if name is not None: self.name = name print('new Student is entered ...') # 无参创建实例 a = Student() # 带参创建实例 b = Student('Alice')
要是希望无参时用类默认的name值,带参时替换,上面的代码就能实现——无参调用时a.name会用类属性的'rahul',带参时b.name是传入的'Alice'。
额外说明
Python里想实现类似“重载”的效果,一般都是靠参数默认值或者可变参数(*args、**kwargs),不是定义多个同名方法。
内容的提问来源于stack exchange,提问作者Roshan Kalmathe
相关产品推荐
相关产品推荐

