您的问题是类B没有声明为“新样式”类。像这样更改它:
class B(object):
它会工作。
super()并且所有子类/超类的内容仅适用于新型类。我建议您养成始终
(object)在任何类定义上键入它的习惯,以确保它是一种新型的类。
旧式类(也称为“经典”类)始终为type
classobj;新样式类的类型为
type。这就是为什么您看到错误消息的原因:
TypeError: super() argument 1 must be type, not classobj
试试看自己:
class OldStyle: passclass NewStyle(object): passprint type(OldStyle) # prints: <type 'classobj'>print type(NewStyle) # prints <type 'type'>
请注意,在Python 3.x中,所有类都是新样式。您仍然可以使用旧样式类中的语法,但是会获得新样式类。因此,在Python 3.x中,您将不会遇到此问题。



