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

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

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

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

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

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

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

34 ответов

9 просмотров

Ты там метаклассы хреначишь что делаешь наследников динамически? Или в 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...

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

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

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

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
короче сгенерила мне эта штука код на ассемблере: struc string val { common local .value dq .value .value: if ~val eq db val end if db 0 } fo...
Vi Chapmann Chapmann
12
Всем привет! Массив вводится с клавиатуры, кол-во элементов неизвестно, поэтому я указал arr db 100 dup(?) С нахождением максимума проблем нет, а вот минимум почему-то всегд...
En Vind Av Sorg
11
Помогите, пожалуйста, делаю программу для для подсчёта корней квадратного уравнения, знаю, что есть куча недочётов, недоработок, но основная проблема в том, что почему-то при ...
NYC
13
#include <stdio.h> int main(void) { int n; scanf("%d", &n); int digits1[n] = {0}; int digits2[n] = {0}; я не могу таким образом заранее массив нулями заполнить?
Linus
12
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
читать файл максимально быстро? странный вопрос))
zamtmn
53
я про форму записи. смысл указывать что 8 байтный регистр 8 байт?
Aiwan \ (•◡•) / _bot
10
Вроде бы вопрос уже заезжанный, но тем не менее У меня есть функция menu() которая выводит набор возможных действий, а затем спрашивает у пользователя что он хотел бы сделать....
David Golovatin
5
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Карта сайта