zip(password, range(len(password))):
hash_value += ord(char) * index
return hash_value % 10 ** 9
class Account:
def __init__(self, login, password):
self._login = login
self.password = password
@property
def login(self):
return self._login
@login.setter
def login(self, new_login=None):
if new_login is not None:
raise AttributeError('Изменение логина невозможно')
@property
def password(self):
return self._password
@password.setter
def password(self, new_password):
self._password = hash_function(new_password)
У нас есть прога, которая может изменить пароль, но если попытать изменить логин, то должна вызываться ошибка. Почему нужно в функции init инициализировать переменную login в приватную переменную, а переменная password остаётся публичной? Если так не сделать, то будет ошибка атрибутов
Ой как понаделано, с чего бы начать... 1. Называть переменные приватными в питоне не принято. 2. В ините не устанавливается значение значение поля password напрямую. Из-за того что password объявлен ниже как property, вызывается его сеттер и на самом деле записывается хэш в поле _password 3. Проверка на None в сеттере login выглядит лишней и странной. 4. Надеюсь это учебный код, а не что-то планируемое для реальной работы. Как минимум нельзя так пароли хэшировать, ну и в целом странно сделано.
Когда ты пишешь obj.password = password у тебя идет обращение к сеттеру property. Если ты так же сделаешь с логином, то тоже сработает сеттер и выдаст ошибку. вообще логика сеттера логина странная, я бы скорее сделал if self._login is not None
Это учебный код, просто я не понимаю, почему если я сделаю вот так self.login = login - то будет выведена ошибка атрибутов
Так ты же сам сеттер переопределил @login.setter def login(self, new_login=None): if new_login is not None: raise AttributeError('Изменение логина невозможно')
Зачем тут значение по-умолчанию, которое никогда не будет использовано
Обсуждают сегодня