170 похожих чатов

Hash_value = 0 for char, index in

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 остаётся публичной? Если так не сделать, то будет ошибка атрибутов

5 ответов

26 просмотров

Ой как понаделано, с чего бы начать... 1. Называть переменные приватными в питоне не принято. 2. В ините не устанавливается значение значение поля password напрямую. Из-за того что password объявлен ниже как property, вызывается его сеттер и на самом деле записывается хэш в поле _password 3. Проверка на None в сеттере login выглядит лишней и странной. 4. Надеюсь это учебный код, а не что-то планируемое для реальной работы. Как минимум нельзя так пароли хэшировать, ну и в целом странно сделано.

Когда ты пишешь obj.password = password у тебя идет обращение к сеттеру property. Если ты так же сделаешь с логином, то тоже сработает сеттер и выдаст ошибку. вообще логика сеттера логина странная, я бы скорее сделал if self._login is not None

Александр-Волжанин Автор вопроса
evle
Ой как понаделано, с чего бы начать... 1. Называть...

Это учебный код, просто я не понимаю, почему если я сделаю вот так self.login = login - то будет выведена ошибка атрибутов

Александр Волжанин
Это учебный код, просто я не понимаю, почему если ...

Так ты же сам сеттер переопределил @login.setter def login(self, new_login=None): if new_login is not None: raise AttributeError('Изменение логина невозможно')

GHdeewre
Так ты же сам сеттер переопределил @login.setter ...

Зачем тут значение по-умолчанию, которое никогда не будет использовано

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта