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

Подскажите, можно ли как-нибудь импортировать через importlib несколько инстансов

одного и того же модуля, и если да то как?

23 ответов

20 просмотров

Зачем?

Skarn- Автор вопроса
Alex
Зачем?

Пришла в голову интересная идея по реализации своего рода мета программирования. Хочу кое что потестить

Skarn
Пришла в голову интересная идея по реализации свое...

Загружай модуль руками в обход стандартной системы импортов.

Skarn
т.е. импортлибом?

да, importlib предоставляет набор примитивов для поиска и загрузки модулей.

Skarn- Автор вопроса
Alex
да, importlib предоставляет набор примитивов для п...

Ну вот importlib.import реализует все что мне необходимо, кроме того, что он не возвращает объект модуля.

Skarn
Ну вот importlib.import реализует все что мне необ...

importlib.__import__ вернет уже загруженный модуль из кеша

Skarn- Автор вопроса
Alex
importlib.__import__ вернет уже загруженный модуль...

а если я передам ему другой сет глобалов и локалов в параметрах?

Skarn- Автор вопроса
Skarn- Автор вопроса
Skarn
Пришла в голову интересная идея по реализации свое...

А расскажи подробнее, может это можно проще

Skarn- Автор вопроса
Tishka17
А расскажи подробнее, может это можно проще

Короче, у меня есть своя реализация парсера бинарных файлов, основанная на type-hint'ах и метаклассе, который при создании класса процессит эти тайпхинты и генерит правила для ридера. Формат, который необходимо сейчас распарсить существует в нескольких версиях. Отличаются наборы полей в структурах, иногда типы. В оригинале его парсят на крестах, и в оригинальном коде юзают либо шаблоны, либо препроцессор на ifdef'ах. Хочу в рамках такой реализации сделать аналог поведения препроцессора в данном случае, загрузив модуль несколько раз с переданной туда глобалкой со значением версии, или какими-то еще параметрами. Внутри же файла со структурами реализовать бранчинг по версии обычными if/else'ами по глобалке.

Skarn
Короче, у меня есть своя реализация парсера бинарн...

А может тебе через Annotated[] можно докинуть инфу о версии?

Skarn- Автор вопроса
Tishka17
А может тебе через Annotated[] можно докинуть инфу...

Так в дефайне самой структуры получается код version-agnostic. Т.е. структуры должны параметризоваться чем-то на ините.

Skarn
Так в дефайне самой структуры получается код versi...

Тогда я не понял, что зависит от версии

Skarn- Автор вопроса
Tishka17
Тогда я не понял, что зависит от версии

От версии зависить может тип поля, или наличие определенного поля структуры.

Skarn
От версии зависить может тип поля, или наличие опр...

Так как может быть version agnostic описание структуры, если тип от версии зависит?

Skarn- Автор вопроса
Tishka17
Так как может быть version agnostic описание струк...

py VERSION = False // представим это приходит из вызова __import__ а не дефайнится здесь class TestStruct(metaclass=BinaryStruct): global VERSION a: int32_t b: char_t c: SomeOtherStruct if (VERSION >= 1): d: float32_t else: d: int32_t if (VERSION >= 1): def some_method(self, x, y, z): print(self.d) // operating on self.d which is a float else: def some_method(self, x, y): print(self.d) // operating on self.d which is an int, also using a different signature

Skarn- Автор вопроса
Tishka17
Так как может быть version agnostic описание струк...

version agnostic он в том плане, что специфицирует поведение для всех версий сразу, но на уровне меты, а не в исполнении методов результирующего класса

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта