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

Есть вопрос по код стайлу, может немного философский, может пипец

нубский :)
У меня есть словарь:
my_dict = {"min": 1, "max": 2}
Есть класс, с такими атрибутами, который я инициализирую маппингом, как MyClass(**my_dict) - вопрос первый - на сколько это best/worst практика?
Едем дальше... min и max являются built-in функциями Python и таким образом я их переопределяю в классе из функций в переменную - ИМХО дерьмовый подход. Варианты, которые вижу я:
1. Переименовать в самом словаре. Но так как эти имена подтягиваются из файла конфигурации и изначально заданы сторонним разработчиком, то пользователю нужно держать в голове, что атрибут в официальной документации "min", а в моих конфигах, например "min_count". Мне кажется, не очень юзерфрендли.
2. Приводить имена в моем классе. Т.е. не использовать маппинг, а инициализировать класс так MyClass(min_count=my_dict['min']...), а потом под капотом преобразовывать (например в реквесте REST) обратно в "min". Больно гемморно, создание инстанса класса надо обновлять везде, при добавлении атрибутов, но может это бестпрактис?
3. Забить хер, на то что ругаются IDE и заниматься переопределением built-in функций, которые внутри класса все равно не используются.
4. Ваш вариант.

12 ответов

11 просмотров

Переопределять built-in точно гнилая затея.

Kirill-Shtrykov Автор вопроса
Maxim Kolesnikov
Переопределять built-in точно гнилая затея.

Спасибо, что подтвердили мои сомнения. А вот красивого решения придумать не могу.

ну вы ж в конструкторе потом сохраняете эти значения как поля экземпляра, верно ж?

class myclass(): def init(self, kwargs): for k, v in kwargs.items(): setattr(self, k, v)

в целом еще зависит, насколько большой объект, который вы скармливаете конструктору, если полей мало, то несложно и нормальные имена поставить. Опять же лично мое имхо 🙂

Kirill-Shtrykov Автор вопроса
Vitalts
class myclass(): def init(self, kwargs): ...

Хм... через кварги. Очень интересный варик.

Kirill-Shtrykov Автор вопроса
Roman Duke
в целом еще зависит, насколько большой объект, кот...

Проблема в том, что объект обновляется с версией стороннего приложения и нужно будет в нескольких местах менять. С другой стороны, полей действительно не так много.

Тебе случайно не dataclass нужен?

Kirill-Shtrykov Автор вопроса
Pavel Павлик
Тебе случайно не dataclass нужен?

Опа... Не успеваю релиз нотс читать... Я еще где-то в районе 3.6 нахожусь :)

Kirill-Shtrykov Автор вопроса
Pavel Павлик
Тебе случайно не dataclass нужен?

Большое спасибо, за подсказку, это действительно может решить все мои вопросы, пойду вкуривать документацию по датаклассам.

Класс инициализируешь или инстанс?

Kirill Shtrykov
Опа... Не успеваю релиз нотс читать... Я еще где-т...

Есть множество решений для классов-контейнеров для аргументов, от стандартного dataclass до marshmellow и pydantic, там же вроде как должен быть и маппинг имен. В dataclass_factory он точно есть

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
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
Карта сайта