python - python中的super()继承方法报错:TypeError: super() argument 1 must be type, not classobj

1.问题:

在python2中莫名其妙使用了super()类方法产生错误,导致产生错误:
TypeError: super() argument 1 must be type, not classobj

如下所示代码示例:

  • 来源:

猫与测试

# 定义人类
class Person():
    def __init__(self, name, age, height, number):
        self.name = name
        self.number = number
        self.age = age
        self.height = height
        
    def talk(self, who):
        print('%s在和%s说话' % (self.name, who))
    
    def hit_doudou(self):
        print('%s正在打豆豆...' % self.name)

# 下面写一个学生类继承人类
class Student(Person):   # 继承的写法:在类申明的时候,括号中写需要继承的父类名
    def __init__(self, class_, name, age, height, number):
        # 学生除了人类中定义的属性,还有班级属性
        self.class_ = class_
        super().__init__(name, age, height, number) 
         # super()函数,如果重写了父类的方法,你在子类中又需要父类的方法
        # 就需要使用super()函数,重新调用父类的同名方法。
        
    def talk(self):  # 重写父类的同名方法
        print('%s在讨论学习' % self.name)
        
    def study(self):
        print('%s正在学习英语...' % self.name)

# 教师类,继承自人类
class Teacher(Person):
    # 只定义了一个讲课方法
    # 其余方法都继承自父类
    def teach(self):
        # 调用父类的属性
        print('%s在讲课'% self.name)

# 实例化子类
s = Stuent('一年级二班', '豆豆', 7, 40, '13101')
s.hit_doudou()  # 子类对象调用父类的方法

在python3中编译通过,但在python2中出错。

原因:python2不支持super类继承方法

2.解决办法

那么我们在python2中如何解决这个问题呢

注意,以下是部分代码改进,将super()方法改写为:

class student(Person):
    def __init__(self, class_, name, age, height, number):
        self.class_ = class_
        Person.__init__(self, name, age, height, number)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值