本文介绍了Python __init__问题:必须以Bank实例作为第一个参数来调用未绑定方法__init __()(改为使用int实例)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
class Teller(object):
def __init__(self):
self.occupied = False
self.timeLeft = 0
self.totTime
def occupy(self, timeOcc):
self.occupied = True
self.timeLeft = timeOcc
def nextMin(self):
self.timeLeft -= 1
self.totTime += 1
if self.timeLeft == 0:
self.occupied = False
class Bank(object):
def __init__(numTellers, hoursOpen):
self.tellers = []
self.timeWaited = 0
self.clientsWaiting = []
for x in xrange(numTellers):
tempTeller = Teller.__init__()
self.tellers.append(tempTeller)
self.minutesOpen = hoursOpen * 60
def tellerOpen(self):
for x in xrange(len(self.tellers)):
if not self.tellers[x].occupied:
return x+1
return 0
def runSim(self, queueInput): #queueInput is a list of tuples (time, timeAtTeller)
simTime = self.minutesOpen
totCli = 0
timeToNext = queueInput[0][0]
timeAtNext = queueInput[0][1]
queueInput.pop(0)
self.clientsWaiting.append([timeToNext, timeAtNext])
while simTime > 0:
for person in self.clientsWaiting:
if person[0]:
person -= 1
if not self.clientsWaiting[len(self.clientsWaiting)-1][0]:
timeToNext = queueInput[0][0]
timeAtNext = queueInput[0][1]
queueInput.pop(0)
self.clientsWaiting.append([timeToNext, timeAtNext])
remove = 0
for x in xrange (len(self.clientsWaiting)-1):
if tellerOpen() and not self.clientsWaiting[x][0]:
self.tellers[tellerOpen()].occupy(self.clientsWaiting[x][0])
totCli += 1
remove += 1
elif not tellerOpen() and not self.clientsWaiting[x][0]:
self.timeWaited += 1
for x in xrange(remove):
self.clientsWaiting.pop(x)
print """The total time spent in the queue by all clients was %d minutes. The total number of clients today was %d. The average waiting time was %d mins""" % (self.timeWaited, totCli, self.timeWaited / totCli)\
if __name__ == '__main__':
inp = raw_input()
tList = inp.split('\n')
qList = []
for item in tList:
tList = item.split(' ')
qList.append((tList[0], tList[1]))
virtBank = Bank.__init__(3, 7)
bank.runSim(qList)
这将导致此错误:
> TypeError: unbound method __init__() must be called with Bank instance as first argument (got int instance instead)
我看不出我没有做错什么.任何建议将不胜感激.
I don't see what I've dont wrong. Any advice would be appreciated.
我认为,唯一重要的部分是Bank class __init__
和调用virtBank = Bank.__init__(3, 7)
The only important parts, I think, are the Bank class __init__
and the call virtBank = Bank.__init__(3, 7)
推荐答案
在此处要说明2点:
-
您不应该直接调用
__init__
,这是一种魔术方法,当您构造如下对象时会调用该方法:
You shouldn't be calling
__init__
directly, it's a magic method which is invoked when you construct an object like this:
virtBank = Bank(3, 7)
该实例被隐式传递给构造函数,但必须被显式接收,如下所示:
The instance is implicitly passed to the constructor, but it must be explicitly received, like this:
def __init__(self, numTellers, hoursOpen):
# ...
这篇关于Python __init__问题:必须以Bank实例作为第一个参数来调用未绑定方法__init __()(改为使用int实例)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!