我最近在Python中开始编码,遇到了将函数返回的值赋给变量的问题。
class Combolock:
def _init_(self,num1,num2,num3):
self.x = [num1,num2,num3]
def next(self, state):
print "Enter combination"
combo = raw_input(">")
if combo == self.x[state]:
print "Correct"
return 1
else:
print "Wrong"
return 0
def lock(self):
currentState = 0
while currentState < 2:
temp = next(currentState)
if temp == 1:
currentState = currentState + 1
else:
currentState = 99
print "ALARM"
当我调用锁定函数时,我在行
处出错temp = next(currentState)
说int对象不是迭代器。
答案 0 :(得分:8)
您应该使用self.next(currentState)
,因为您希望在类范围内使用next
方法。
功能next
是全局的,next(obj)
仅在obj
为iterator时才有效。
您可能希望查看python文档中的yield statement。
答案 1 :(得分:4)
正如Andrea(+1)所指出的,你需要告诉python你想在self对象上调用next()方法,所以你需要调用它self.next(currentState)
。
另外,请注意,您已定义了不正确的初始值设定项(也称为构造函数)。你必须使用双下划线:
__init__(...
而不是:
_init_(...
否则它只是一种方法 - 在对象创建时不会被调用。
答案 2 :(得分:0)
使用self.next(currentState),否则它指的是迭代器的next()方法,而不是你的类
答案 3 :(得分:0)
错误意味着它所说的内容。当您使用next(iterable)
时,next
会尝试调用iterable
的{{1}} 方法。但是,当您执行next
:
dir(0)
如您所见,整数上没有['__abs__',
# ... snip ...
'__xor__',
'bit_length',
'conjugate',
'denominator',
'imag',
'numerator',
'real']
方法。
如果您尝试调用自己的next
方法,则需要使用next
而不是self.next
。 next
是一个内置函数,它调用迭代器的next
方法让你做这样的事情:
next
尝试:
for something in my_iterator:
print something