如何使用超级命令python

时间:2015-09-23 06:30:22

标签: python super

我在使用超级命令时遇到问题

class s:
    def __init__(self,a):
        self.a=a

    def show(self):
        print self.a


class t:
    def __init__(self,b):
        self.b=b

    def show2(self):
        print self.b


class w(s):
    def __init__(self,a,b,c):
        super(w,self).__init__()
        self.b=b
        self.c=c

    def show3(self):
        super(w,self).show()
        print self.b
        print self.c

每当我创建一个对象时,它都会出现以下错误

x=w(1,2,3)

Traceback (most recent call last):
    File "<pyshell#0>", line 1, in <module>
x=w(1,2,3)
File "C:\Users\GURSAHEJ\Desktop\k.py", line 13, in __init__
super(w,self).__init__()
TypeError: must be type, not classobj

2 个答案:

答案 0 :(得分:1)

super function将返回一个代理对象,该对象将方法调用委托给父类或兄弟类类型,因此当您想要使用它时,您需要将父名称传递给它,并且从那里开始{{1}从w继承的类您可能希望将s传递给s

super

另外,请不要忘记将object传递给您的父类,使其成为new style class

class w(s):
    def __init__(self,a,b,c):
        super(s,self).__init__()
        self.b=b
        self.c=c

在python文档中了解新样式和经典类 https://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes

答案 1 :(得分:0)

因为您在old-style class

上使用super

在Python 2.x(&gt; = 2.2)中,有两种类型。旧式课程和新式课程。在python 3.x中,删除了旧式类,所有类都是新式类。

Python的内置函数 super适用于新式类。

简单地说,新式类扩展object而旧式类不扩展。

Old Sytle Class

class s:
    def __init__(self,a):
        self.a=a

新款式

class s(object):
    def __init__(self,a):
        self.a=a

因此,不是从另一个类继承的类应该从object继承为新的样式类。

您可以使用 new-style 或使用old-skool继承__init__

class w(s):
    def __init__(self,a,b,c):
        s.__init__(self, a)

这是old-style solution的示例,但我不会将此问题标记为重复,因为鼓励使用新式类,并且应避免使用旧式类。