缘由
在自定义类并使用类的继承时,如下代码产生了TypeError: super() argument 1 must be type, not classobj 的错误提示
class Person():
def __init__(self, name, gender):
self.name = name
self.gender = gender
class Teacher(Person):
def __init__(self, name, gender, subject):
super(Teacher, self).__init__(name, gender)
self.subject = subject
teacher = Teacher('Tom', 'boy', 'English')
解决
#法一
class Person():
def __init__(self, name, gender):
self.name = name
self.gender = gender
class Teacher(Person):
def __init__(self, name, gender, subject):
Person.__init__(self, name, gender)
self.subject = subject
#法二
class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender
class Teacher(Person):
def __init__(self, name, gender, subject):
super(Teacher, self).__init__(name, gender)
self.subject = subject
- 在2.x版本中,定义类时括号中必须显式使用object对象才是定义了新式类,否则是经典类(旧式类)无法使用super进行继承
- 在3.x版本中,定义类则无论是否显式继承object对象都默认是新式类
- 在多重继承问题上,经典类偏向深度优先搜索属性,而新式类则是C3算法与广度优先结果恰同