我在使用超级命令时遇到问题
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
答案 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
而旧式类不扩展。
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的示例,但我不会将此问题标记为重复,因为鼓励使用新式类,并且应避免使用旧式类。