Выполнение этого может выглядеть следующим образом:
class BankLoginSystem(object):
def __init__(self, bank_users):
self.bank_users = bank_users
self.logged_in_user = None
def login_or_exit(self):
while True:
print("Please Enter User Name")
attempted_user = input(">> ")
print("Please Enter Password")
attempted_password = input(">> ")
if attempted_password == self.bank_users.get(attempted_user):
self.logged_in_user = attempted_user
print("Success!!")
return
else:
print("Unsuccesful!!")
# the user database is independent of the implementation
bank_users = { "Aldo": "1234" }
login = BankLoginSystem(bank_users)
login.login_or_exit()
print("Logged in user is: %s" % login.logged_in_user)
Обратите внимание, что мы не принимаем имя пользователя и пароль в качестве аргументов инициализации объекта - поскольку объект может иметь несколькопользователи вошли в систему на протяжении всей его жизни, это не имеет смысла.
Точно так же вещи, которые должны храниться в секрете (например, попытки паролей), мы не храним в переменных членов класса, но строго хранимкак местные жители, чтобы они не выходили за рамки.(В реальной системе вы бы хотели, чтобы в вашей базе паролей были соленые хеши, а не настоящие пароли, содержащие ущерб, если утечка из самой базы паролей).
Кстати, обратите внимание, что, вообще говоря, объединяя ваш ввод / выводЛогика с вашим представлением внутреннего хранилища - плохая идея - обычно вы хотите, чтобы чистые объекты, моделирующие ваш домен, были отделены и отличались от того, что происходит с пользователями.