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)