【Python学习笔记:13】一些瓜娃子行为的bug

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!!

扩展知识:子类与父类初始化重写与继承

  1. 子类不重写 __init__,实例化子类时,会自动调用父类 __init__
  2. 子类重写 __init__,实例化子类,不会调用父类 __init__
  3. 子类重写 __init__,要继承父类,可使用 super 关键字

重写且需继承语法
super().__init__(参数1,参数2,...)
or
super(子类,self).__init__(参数1,参数2,...)
or
父类名称.__init__(self, 参数1,参数2,...)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

饭碗、碗碗香

感谢壮士的慷概解囊!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值