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 ответов

10 просмотров

Переопределять 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 он точно есть

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

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

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта