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

Насколько хуёво использовать магию (Синглтон) для того, чтобы не городить

огород при обходе дерева наследований?

Уточню что в рекурсивной функции, которая формирует дерево наследников, я формирую экземпляр класса, назову например Х.

После чего мне требуется достать экземпляр родительского (по отношению к Х) класса, ради атрибута.

А тут, собственно говоря, мозгов и не хватает.

То ли просто сначала формировать дико вложенные списки классов, затем проводить по ним инициализацию, и исходить из этого, или реализовать Синглтон, но это говномагия, либо ещё какую-то хрень выдумывать...

34 ответов

24 просмотра

Ты там метаклассы хреначишь что делаешь наследников динамически? Или в subclasses добавляешь? Поясни получше

Aleksandr-Danilov 🇺🇦 Автор вопроса

Это один из обозначенных мною вариантов - собрать сначала многократно вложенный список из наследников. Который мне не то чтоб нравится.Всё равно там придётся рекурсивно обходить, а тут и проблема - как в рекурсивке получить доступ к родителю

Aleksandr-Danilov 🇺🇦 Автор вопроса
Aleksandr Danilov 🇺🇦
Это один из обозначенных мною вариантов - собрать ...

Хуй знает, видимо наилучшим среди худшего - словарь вида {cls: экземпляр cls}...

Aleksandr Danilov 🇺🇦
Хуй знает, видимо наилучшим среди худшего - словар...

Залезь в new метод магический И сделай что бы каждый наследник автоматически при инициализации инстанса добавлялся в какую либо структуру у базового класса

Aleksandr-Danilov 🇺🇦 Автор вопроса
Artem
Залезь в new метод магический И сделай что бы кажд...

По сути сделал это же самое, но через словарик в управляющем этой вакханалией классе

Синглтон == глобальная переменная. Какую задачу ты решаешь вообще? Зачем ты обходишь дерево наследований?

Aleksandr-Danilov 🇺🇦 Автор вопроса
Pavel Павлик
Синглтон == глобальная переменная. Какую задачу т...

Повторяю (частично) механизм ORMок, где классами задана некоторая структура. Пример в предыдущем сообщении. Собираю наследников, инициализирую, работаю с их атрибутами.

Aleksandr-Danilov 🇺🇦 Автор вопроса
Pavel Павлик
Что за «механизм ORMок»? Это что такое?

ORM знаешь что такое? Алхимия например?

Aleksandr Danilov 🇺🇦
ORM знаешь что такое? Алхимия например?

Знаю, непонятно, что ты подразумеваешь под «механизмом ORMок»

Aleksandr-Danilov 🇺🇦 Автор вопроса
Pavel Павлик
Ты ORM делаешь свою?

Нет, но переношу описанную механику на новую задачу

Aleksandr-Danilov 🇺🇦 Автор вопроса

Дёрнуло меня заняться какой-то хуйней, вот и задаю сюда странные вопросы

Немного им пользовался. Опиши проблему давай

Aleksandr Danilov 🇺🇦
Дёрнуло меня заняться какой-то хуйней, вот и задаю...

Мне странно что ты инициализируешь инстансы обходя наследников базового класса

Aleksandr-Danilov 🇺🇦 Автор вопроса
Pavel Павлик
Немного им пользовался. Опиши проблему давай

Вероятно ты использовал вторую версию. Речь за тройку, но думаю будет понятно. Я решил спиздить механизм описания таблиц БД в ORM, и перенести его для хендлеров аиограмма.

Aleksandr-Danilov 🇺🇦 Автор вопроса
Artem
Мне странно что ты инициализируешь инстансы обходя...

Нет, там инициация сначала родителя, затем всех наследников 1-уровня и т.д.

Aleksandr Danilov 🇺🇦
Нет, там инициация сначала родителя, затем всех на...

А зачем для этого что-то городить? Ты слышал про super() и mro?

Aleksandr-Danilov 🇺🇦 Автор вопроса

Да, но тогда ещё больше хрень получается. Он ищет в другую сторону - от дальнего наследника к родителю. А у меня обратная ситуация

Одна хуйня, ты уже ступил на дорожку сомнительной магии

Aleksandr-Danilov 🇺🇦 Автор вопроса
Tishka17
Одна хуйня, ты уже ступил на дорожку сомнительной ...

Ну, в этот раз мета вроде не нужна. Единственное, на чём я проебался - если сразу хуярить например class BasicCommands(...): router = Router() @router.message() async def start(self, m: Message): ... То улетает в аиограм непроинициализированный метод. То есть self идёт нахуй, что нехорошо. И тут наступает пиздец, ибо надо либо какую-то прокладку, чтобы уже потом подать в аиограм метод проинициализированного класса, или забить хер на self, а этого не хочется.

Aleksandr Danilov 🇺🇦
Ну, в этот раз мета вроде не нужна. Единственное,...

А ты не можешь залезть в router? Ну отнаследуй его по самые нехочу, и как то где то там вызывай метод сам не передевая то что передавал оригинальный роутер

Aleksandr-Danilov 🇺🇦 Автор вопроса
Artem
А ты не можешь залезть в router? Ну отнаследуй его...

Вот это и есть по-видимому единственный вариант. Ну, кроме как забить на self конечно.

Aleksandr-Danilov 🇺🇦 Автор вопроса
Aleksandr Danilov 🇺🇦
Вот это и есть по-видимому единственный вариант. ...

Правда потом будет такой говнокод, шо пиздц, из-за особенности нейминга параметров роутеров в аиограмме

Aleksandr Danilov 🇺🇦
Правда потом будет такой говнокод, шо пиздц, из-за...

Ну там твоя простыня, потом позиционные, не позиционные, аргсы, кваргсы, / и просто * Такой комбинацией почти все можно оверрайднуть

Aleksandr-Danilov 🇺🇦 Автор вопроса
Artem
Ну там твоя простыня, потом позиционные, не позици...

Там такая хуйня блять, что нельзя сделать условный router.register('message', args, kwargs) Там идёт router.message.register(...) То есть либо надо наследовать вообще всё нахуй, и менять только атрибут, в таком случае корневое обращение получается getattr(router, "message").register(...) Словом, весело.

Aleksandr Danilov 🇺🇦
Правда потом будет такой говнокод, шо пиздц, из-за...

Передавай аёграмму не класс а инстанс, определи call, херани аргсы кваргсы и работой из call с селф))) без проблем

Aleksandr-Danilov 🇺🇦 Автор вопроса
Artem
Передавай аёграмму не класс а инстанс, определи ca...

Не, хуйня какая-то. Хендлер на класс точно не пойдёт

Aleksandr-Danilov 🇺🇦 Автор вопроса
Artem
Передавай аёграмму не класс а инстанс, определи ca...

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта