TypeError: Student() takes no arguments
报错代码
# 学生信息
"""
封装 Student 类
属性有 name age tel score sex
方法有 getScore(打印 name score) getStudent(打印个人全部信息)
"""
# 1 封装 Student 类
class Student:
def __ini__(self, name, age, tel, score, sex):
self.name = name
self.age = age
self.tel = tel
self.score = score
self.sex = sex
pass
def getScore(self):
return f'name: {self.name} score: {self.score}'
def getStudent(self):
return f'name: {self.name} age: {self.age} tel: {self.tel} score: {self.score} sex: {self.sex}'
def creatStudent(self, count):
std_list = []
idx = 0
while idx < count:
name = input('name: ')
age = int(input('age: '))
tel = input('tel: ')
score = int(input('score: '))
sex = input('sex: ')
std_list.append(Student(name, age, tel, score, sex))
idx += 1
pass
return std_list
girl = Student('张三', 20, '130', 98, '女')
print(girl.getScore())
print(girl.getStudent())
报错提示 11 行和 41 行
原本之前一个类似的题,没报错,突然不明白为何现在报错了
直到… 搜到个帖子写着,看看初始化写的是不是__init__
,我还在想,怎么的,选的 pycharm 提示回车敲出来的代码,这还能错?
哈哈哈哈没想到啊,还真写错了0.0!!
关键是,__ini__
方法不运行时,pycharm 还没报错,这… 真是,天要亡我,可真是谁拦也拦不住0.0!!
谢谢你,伟大的互联网,我不是第一个出现这个报错的人,还挺欣慰?(狗头)
TypeError: init() missing 3 required positional arguments: ‘age’, ‘weapon’, and ‘formula’
报错代码
# 徒弟 Prentice 父类
"""
孙悟空
属性 name age 武器weapon 紧箍咒formula
方法 吃斋doMaigre 念佛buddha 取经doPilgrimage 战斗fight 降妖extDevil
...
"""
class Prentice:
def __init__(self, name, age, weapon):
self.name = name
self.age = age
self.weapon = weapon
pass
def buddha(self):
return '念佛'
def doPilgrimage(self):
return '取经'
def fight(self):
return '战斗'
class MonkeyKing(Prentice):
def __init__(self, name, age, weapon, formula):
self.formula = formula
super().__init__(name, age, weapon)
pass
def getMonkeyKing(self):
return f'name: {self.name} age: {self.age} weapon: {self.weapon} formula: {self.formula}'
def doMaigre(self):
return '吃斋'
def extDevil(self):
return '降妖'
mk = MonkeyKing(True)
print(mk.getMonkeyKing())
print(mk.doMaigre())
print(mk.buddha())
print(mk.doPilgrimage())
print(mk.fight())
print(mk.extDevil())
报错显示 27 行和 42 行错误,一直以为是调用父类__init__
方法没写对(没错,脑壳儿短路了0.0!!)
看完父类和子类,百度 bug 改了没效果后,直到看到,42 行… 没有传参0.0!!
真的要被自己蠢哭0.0!!
扩展知识:子类与父类初始化重写与继承
- 子类不重写
__init__
,实例化子类时,会自动调用父类__init__
- 子类重写
__init__
,实例化子类,不会调用父类__init__
- 子类重写
__init__
,要继承父类,可使用 super 关键字
重写且需继承语法
super().__init__(参数1,参数2,...)
or
super(子类,self).__init__(参数1,参数2,...)
or
父类名称.__init__(self, 参数1,参数2,...)