python中super出现的TypeError: must be type, not classobj 原因及解决

本文介绍了Python中类继承的概念及super函数的应用方法,并通过一个具体示例详细解释了TypeError: super() argument 1 must be type, not classobj错误的原因及其解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在刚学习python的时候,学习类的继承的时候,自己凭记忆手工敲了下代码,运行的时候报了如下错误:

C:\Python27\python.exe C:/Users/yangfeng/PycharmProjects/untitled/class_hbk/test.py
Traceback (most recent call last):
  File "C:/Users/yangfeng/PycharmProjects/untitled/class_hbk/test.py", line 21, in <module>
    hbk = Man()
  File "C:/Users/yangfeng/PycharmProjects/untitled/class_hbk/test.py", line 12, in __init__
    super(Man, self).__init__(self.age,self.weight,self.name)
TypeError: super() argument 1 must be type, not classobj

Process finished with exit code 1

编写的代码如下:

#!/usr/bin/python
# -*- coding:UTF-8 -*-
class Person:
    def __init__(self,age,weight,name):
        self.age=age
        self.weight=weight
        self.name=name

    def introduce(self):
        print 'My name is %s,age=%s,weight=%s'%(self.name,self.age,self.weight)
class Man(Person):
    def __init__(self,age,weight,name,sex):
        super(Man, self).__init__(age,weight,name)
        self.sex=sex
    def introduce(self):
        print  'I am Man,name=%s,age=%s,weight=%s,sex=%s'%(self.name,self.age,self.weight,self.sex)
class Woman(Person):
    def introduce(self):
        print  'I am Woman.name=%s,age=%s,weight=%s'%(self.name,self.age,self.weight)

if __name__=='__main__':
    hbk = Man("29","170","黄宝康","男")
    zll = Woman("28","100","张露露")
    p = Person("999","999","person")
    hbk.introduce()
    zll.introduce()
    p.introduce()

查找资料之后发现,python中super只能应用于新类,而不能应用于经典类
所谓新类就是所有类都必须要有继承的类,如果什么都不想继承,就继承到object类。
所谓经典类就是什么都不用继承的类。

解决方法,改成Person(object)即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

黄宝康

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值