class Lock:
def __init__(self):
self.key_code = "1234" # Change this to your desired key code
self.is_locked = True
def lock(self):
self.is_locked = True
def unlock(self, entered_code):
if entered_code == self.key_code:
self.is_locked = False
else:
print("Incorrect key code. Lock remains locked.")
def is_locked(self):
return self.is_locked
def main():
my_lock = Lock()
print("The lock is currently locked.")
while my_lock.is_locked():
entered code = input("Enter the key code: ")
my_lock.unlock(entered code)
print("The lock is now unlocked.")
if __name__ == "__main__":
main()
我写了这段代码,但它显示了一个
Type Error: 'bool' object is not callable
The lock is currently locked.
我一直在尝试创建一个锁定机制,但它显示类型错误。我尝试了很多方法还是没能解决。
你就快到了:你的代码中有轻微错误 我。构造函数方法应该命名为init(带双下划线)而不是init。 二.您有一个名为 is_locked 的实例变量和一个名为 is_locked 的方法。这可能会导致冲突。我将该方法重命名为 is_locked_status 以避免冲突。 三.调用is_locked_status方法时,需要使用括号()来调用该方法并获取其返回值。
class Lock:
def __init__(self): # Use double underscores for the constructor method name
self.key_code = "1234"
self.is_locked = True
def lock(self):
self.is_locked = True
def unlock(self, entered_code):
if entered_code == self.key_code:
self.is_locked = False
else:
print("Incorrect key code. Lock remains locked.")
def is_locked_status(self): # Rename the method to avoid name conflict
return self.is_locked
def main():
my_lock = Lock()
print("The lock is currently locked.")
while my_lock.is_locked_status(): # Call the renamed method
entered_code = input("Enter the key code: ")
my_lock.unlock(entered_code)
print("The lock is now unlocked.")
if __name__ == "__main__":
main()
这里有两种方法。
class Lock:
def __init__(self):
self.key_code = "1234" # Change this to your desired key code
self.is_locked = True
def lock(self):
self.is_locked = True
def unlock(self, entered_code):
if entered_code == self.key_code:
self.is_locked = False
else:
print("Incorrect key code. Lock remains locked.")
def is_locked(self):
return self.is_locked
def main():
my_lock = Lock()
print("The lock is currently locked.")
while my_lock.is_locked: # <-- Use variable here instead of getter
entered_code = input("Enter the key code: ")
my_lock.unlock(entered_code)
print("The lock is now unlocked.")
if __name__ == "__main__":
main()
这可行,但你想使用 getter 来访问你的变量。
class Lock:
def __init__(self):
self.key_code = "1234" # Change this to your desired key code
self.locked = True
def lock(self):
self.locked = True
def unlock(self, entered_code):
if entered_code == self.key_code:
self.locked = False
else:
print("Incorrect key code. Lock remains locked.")
def is_locked(self):
return self.locked
def main():
my_lock = Lock()
print("The lock is currently locked.")
while my_lock.is_locked():
entered_code = input("Enter the key code: ")
my_lock.unlock(entered_code)
print("The lock is now unlocked.")
if __name__ == "__main__":
main()
问题在于变量和方法具有相同的名称。提示就在错误中——它使用变量,认为它是一个方法,而不是使用同名的方法。将变量更改为
locked
使其起作用。
首先,在提出问题时,您应该提供格式良好的代码,可以重现与您相同的结果。
为了回答您的问题,让我们看一下您收到的错误:
Traceback (most recent call last):
File "C:/Users/myuser/Desktop/snippets/stackoverflow.py", line 27, in <module>
main()
File "C:/Users/myuser/Desktop/snippets/stackoverflow.py", line 21, in main
while my_lock.is_locked():
TypeError: 'bool' object is not callable
错误指出第 21 行中的“bool”对象不可调用,即这一行:
while my_lock.is_locked():
Python中的“可调用”实体是一个可以被调用的实体,类似于函数,其中 is_locked 是一个布尔值,只能读取或变异为 True 或 False,以下是无效的:
True() False()
,所以简单将行更改为 while my_lock.is_locked:
可以解决您的问题。完整代码应如下所示:
class Lock:
def __init__(self):
self.key_code = "1234" # Change this to your desired key code
self.is_locked = True
def lock(self):
self.is_locked = True
def unlock(self, entered_code):
if entered_code == self.key_code:
self.is_locked = False
else:
print("Incorrect key code. Lock remains locked.")
def is_locked(self):
return self.is_locked
def main():
my_lock = Lock()
print("The lock is currently locked.")
while my_lock.is_locked:
entered_code = input("Enter the key code: ")
my_lock.unlock(entered_code)
print("The lock is now unlocked.")
if __name__ == "__main__":
main()