Вернуть пустое
Nov. 9th, 2022 03:51 pmВот я прям питон начинаю не любить. Казалось бы, утиная типизация и всеобщая приятность. Никакого фашизма, всё можно.
А вот вам простая задачка, которую на rust'е generic'и решают в одну строчку, а на питоне я не знаю как (в разумные усилия).
Есть функция, которая читает вывод (утилиты) и возвращает распашенный json. Она достаточно generic, чтобы в зависимости от вывода утилиты вернуть list или dict.
Теперь я хочу добавить фэнсервиса - если вывод пустой, то возвращать пустой элемент (список или словарь). Как? КАК?
>>> class foo(dict,list):
... pass
...
Traceback (most recent call last):
File "", line 1, in
TypeError: multiple bases have instance lay-out conflict
А вот вам простая задачка, которую на rust'е generic'и решают в одну строчку, а на питоне я не знаю как (в разумные усилия).
Есть функция, которая читает вывод (утилиты) и возвращает распашенный json. Она достаточно generic, чтобы в зависимости от вывода утилиты вернуть list или dict.
Теперь я хочу добавить фэнсервиса - если вывод пустой, то возвращать пустой элемент (список или словарь). Как? КАК?
>>> class foo(dict,list):
... pass
...
Traceback (most recent call last):
File "
TypeError: multiple bases have instance lay-out conflict
no subject
Date: 2022-11-09 07:11 pm (UTC)Нет, не так.
Смотри. Есть функция json_loads. Sound она по типам или unsound - это вопрос открытый, вне обсуждения.
Теперь мне нужно для этой функции написать декоратор, который бы сохранял оригинальную семантику:
но возвращал Default для соотв. типа, если (внешний side effect) вернул ошибку.
И вот я не могу. Я не знаю, что ожидает вызывающий код, так что я не могу вернуть соответствующий тип.
А срачик на reddit'е (к сожалению, потёрли) сказал, что сконструировать list-or-dict невозможно в принципе, потому что https://docs.python.org/3/c-api/typeobj.html#Py_TPFLAGS_MAPPING
no subject
Date: 2022-11-10 05:47 am (UTC)Гм. То есть с вон тем предложенным
Emptyбудут проблемы, когда пациент попробует его паттерн-матчить об паттерны[…]или{…}. Окей, верю.