我不斷收到以下錯誤,但似乎找不到解決方案。
if password not in old_passwords:
TypeError: argument of type 'PasswordManager' is not iterable
為了清楚起見,我需要創建一個名為“PasswordManager”的類。該類應該有一個名為“old_passwords”的串列。該串列包含所有過去的密碼,串列的最后一個索引應該是當前密碼。所需的方法是“set_password”、“get_password”和“is_correct”。
'get_password' 應回傳當前密碼。
'set_password' 設定新密碼。如果嘗試的密碼與所有用戶過去的密碼不同,它應該只更改密碼。
'is_correct' 接收一個字串并根據該字串是否等于當前密碼回傳布林值 True 或 False。
class PasswordManager():
old_passwords = []
def get_password(old_passwords):
return old_passwords[len(old_passwords-1)]
def set_password(old_passwords, password):
if password not in old_passwords:
old_passwords.append(password)
def is_correct(old_passwords, password):
if password == old_passwords[len(old_passwords-1)]:
return True
else:
return False
有沒有人有想法可以幫助我?提前致謝!
uj5u.com熱心網友回復:
我認為您需要回顧一下如何在 Python 中使用類。您的類需要一個建構式,您可以在其中實體化您的類屬性(在您的情況下old_passwords),并且可以使用self. 您的用例示例可能是
class PasswordManager():
def __init__(self):
self.old_passwords = []
def get_password(self):
return self.old_passwords[-1]
def set_password(self, password):
if password not in self.old_passwords:
self.old_passwords.append(password)
def is_correct(self, password):
return password == self.old_passwords[-1]
使用[-1]您可以訪問串列的最后一個元素。
__init__是python中的構造方法。
uj5u.com熱心網友回復:
python 類方法需要第一個引數作為類本身。此外,您不能直接訪問其方法中的類變數或方法。
需要使用類似self.somemethod()或self.somevariable
class PasswordManager():
old_passwords = []
def get_password(self):
return self.old_passwords[-1]
def set_password(self, password):
if password not in self.old_passwords:
self.old_passwords.append(password)
def is_correct(self, password):
if password == self.old_passwords[-1]:
return True
else:
return False
此外,您正在以錯誤的方式訪問串列中的最后一項。old_passwords[len(old_passwords-1)]應該是old_passwords[len(old_passwords)-1]。
但是,old_passwords[-1]是更好的選擇。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/536996.html
上一篇:難以實體化子類[物件沒有屬性]
下一篇:如何根據類資料從串列中洗掉專案
