为了账号安全,请及时绑定邮箱和手机立即绑定

super()失败,并显示错误:当父级未从对象继承时,TypeError

super()失败,并显示错误:当父级未从对象继承时,TypeError

杨魅力 2019-10-06 13:22:33
我收到一些我不知道的错误。任何线索我的示例代码有什么问题吗?class B:    def meth(self, arg):        print argclass C(B):    def meth(self, arg):        super(C, self).meth(arg)print C().meth(1)我从“ super”内置方法的帮助下获得了示例测试代码。“ C”类是这是错误:Traceback (most recent call last):  File "./test.py", line 10, in ?    print C().meth(1)  File "./test.py", line 8, in meth    super(C, self).meth(arg)TypeError: super() argument 1 must be type, not classobj仅供参考,这是python本身的帮助(超级):Help on class super in module __builtin__:class super(object) |  super(type) -> unbound super object |  super(type, obj) -> bound super object; requires isinstance(obj, type) |  super(type, type2) -> bound super object; requires issubclass(type2, type) |  Typical use to call a cooperative superclass method: |  class C(B): |      def meth(self, arg): |          super(C, self).meth(arg) |
查看完整描述

3 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

您的问题是类B没有声明为“新样式”类。像这样更改它:


class B(object):

它会工作。


super()并且所有子类/超类的内容仅适用于新型类。我建议您养成始终(object)在任何类定义上键入它的习惯,以确保它是一种新型的类。


旧式类(也称为“经典”类)始终为type classobj;新样式类的类型为type。这就是为什么您看到错误消息的原因:


TypeError: super() argument 1 must be type, not classobj


试试看自己:


class OldStyle:

    pass


class NewStyle(object):

    pass


print type(OldStyle)  # prints: <type 'classobj'>


print type(NewStyle) # prints <type 'type'>

请注意,在Python 3.x中,所有类都是新样式。您仍然可以使用旧样式类中的语法,但是会获得新样式类。因此,在Python 3.x中,您将不会遇到此问题。


查看完整回答
反对 回复 2019-10-06
?
12345678_0001

TA贡献1802条经验 获得超5个赞

另外,如果您不能更改类B,则可以使用多重继承来修复错误。


class B:

    def meth(self, arg):

        print arg


class C(B, object):

    def meth(self, arg):

        super(C, self).meth(arg)


print C().meth(1)


查看完整回答
反对 回复 2019-10-06
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

如果python版本是3.X,就可以了。


我认为您的python版本是2.X,添加此代码后,超级版本将起作用


__metaclass__ = type

所以代码是


__metaclass__ = type

class B:

    def meth(self, arg):

        print arg

class C(B):

    def meth(self, arg):

        super(C, self).meth(arg)

print C().meth(1)


查看完整回答
反对 回复 2019-10-06
  • 3 回答
  • 0 关注
  • 620 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信