传递给__init__()的参数不足
下面的错误是什么?另外,有没有更好的方法来实现以下这些类?
#!/usr/bin/python
class Datacenters:
def __init__(self,name,location,cpu,mem):
self.name=name
self.location=location
self.cpu=cpu
self.mem=mem
def getparam(self):
return self.name,self.location ,self.cpu,self.mem
def getname(self):
return self.name
class WS(Datacenters):
def __init__(self,name,location,cpu,mem,obj):
#datacentername = Datacenters.__init__(self) #To which data center it is associated
self.dcname =obj.name #To which data center it is associated
Datacenters.__init__(obj,name,location,cpu,mem)
def getparam(self,obj):
self.name,self.location ,self.cpu,self.mem = obj.getparam()
print self.dcname
#return self.name,self.location ,self.cpu,self.mem,obj.name
def getwsname(self):
return self.name
class Pcs(WS):
def __init__(self,name,location,cpu,mem,obj):
self.wsname = obj.getwsname() #To which WS it is associated
WS.__init__(obj,name,location,cpu,mem)
def getparam(self,obj):
print obj.getparam()
print self.wsname
a = Datacenters("dc1","Bl1",20,30)
print a.getparam()
b = WS("WS1","Bl1",21,31,a)
print b.getparam(a)
c = Pcs("PC1","Bl1",20,30,b)
#print c.getparam(b)
输出:
Press ENTER or type command to continue
('dc1', 'Bl1', 20, 30)
dc1
None
Traceback (most recent call last):
File "class1.py", line 45, in <module>
c = Pcs("PC1","Bl1",20,30,b)
File "class1.py", line 34, in __init__
WS.__init__(obj,name,location,cpu,mem)
TypeError: __init__() takes exactly 6 arguments (5 given)
1 个回答
2
这个错误是因为你传了五个参数,但__init__
需要六个。来数一数:
def __init__(self,name,location,cpu,mem,obj):
一共六个参数。你应该这样调用:
WS.__init__(obj,name,location,cpu,mem)
但是你只传了五个参数。第一个参数self
缺失了。你应该问自己,为什么有时候不需要一直传六个参数。
这是因为当你在一个实例上调用方法时,self
会自动传入。不过在这个情况下,你是直接在类上调用它,而不是在实例上调用。其实在这种情况下这样做没有必要,正确的写法是:
WS(obj,name,location,cpu,mem)
正如你上面提到的,确实可以在更上面的地方工作。