|
1 / 1 / 0
Регистрация: 04.03.2019
Сообщений: 70
|
||||||||||||||||
Как создать класс с динамическими атрибутами04.10.2020, 09:11. Показов 5098. Ответов 31
Метки нет (Все метки)
добрый день! Помогите сделать по типу:
one.two Как в библиотеки vk_api при работе с методами
0
|
||||||||||||||||
| 04.10.2020, 09:11 | |
|
Ответы с готовыми решениями:
31
Создать в Python класс User с атрибутами
Использование типов DataContract с другими атрибутами. Прокси класс не генерирует DataContract с атрибутами |
|
1 / 1 / 0
Регистрация: 04.03.2019
Сообщений: 70
|
|
| 04.10.2020, 09:32 [ТС] | |
|
Welemir1, это так, тестово. У меня будет класс для работы с API, и туда я буду пихать метод ( как в vk_api ) и параметры
0
|
|
|
Автоматизируй это!
|
||||
| 04.10.2020, 09:35 | ||||
|
скажем вот это Так вот и вопрос стоит ли кумекать если польза сомнительна? я не про себя, а про тебя, тебе это точно зачем то может пригодиться?
0
|
||||
|
1 / 1 / 0
Регистрация: 04.03.2019
Сообщений: 70
|
||||||
| 04.10.2020, 09:48 [ТС] | ||||||
|
Welemir1, да, очень надо
Добавлено через 5 минут надо например
0
|
||||||
|
Автоматизируй это!
|
|||
| 04.10.2020, 09:50 | |||
то есть сформулироват пользу не получается?ну ок, не буду мучать, переопределяй у своего класса магические методы __getattr__ и __getattribute__ Добавлено через 34 секунды
0
|
|||
|
1 / 1 / 0
Регистрация: 04.03.2019
Сообщений: 70
|
|||||||||||
| 04.10.2020, 09:55 [ТС] | |||||||||||
|
Welemir1, хочу что-бы была гибкая система.
Есть в API метод, я передаю его Api.method(), без функций, и передаю параметры в виде **kwargs пример из vk_api
AttributeError: 'NoneType' object has no attribute 'gfs'
0
|
|||||||||||
|
Автоматизируй это!
|
|||
| 04.10.2020, 09:57 | |||
|
1
|
|||
|
1 / 1 / 0
Регистрация: 04.03.2019
Сообщений: 70
|
|
| 04.10.2020, 10:10 [ТС] | |
|
Welemir1, не могу понять что и как там
0
|
|
| 04.10.2020, 10:16 | ||
|
_shut_, Мне лень вникать в то, зачем Вам это нужно. Однако зацепился за слова
1
|
||
|
1 / 1 / 0
Регистрация: 04.03.2019
Сообщений: 70
|
|
| 04.10.2020, 10:18 [ТС] | |
|
0
|
|
| 04.10.2020, 10:45 | ||||||
|
Сейчас опишу как динамически создавать новые переменные. Проверено на примерах. Но для атрибутов не проверял, но скорее всего тоже будет работать, так как атрибут это такая же переменная, но только прикрепленная к другой переменной.
Но нужно будет поэкспериментировать. Проверять будем параллельно и Вы и я , после того, как я опишу метод для простой переменной. Добавлено через 19 минут _shut_, Начиная с версии 3.8 для создания новой переменной внутри выражения можно использовать оператор := . (мое прим. Однако он не позволяет динамически создавать переменную из текстовой строки, как это можно сделать с помощью exec() . То есть при использовании оператора := мы должны заранее знать имя переменной, хотя она и создается динамически только в момент использовании выражения содержащего оператор := ). (мое прим. С помощью функции exec() можно автоматически из строки создавать новые динамические переменные). Кстати функция evel() не позволяет этого сделать, так как не разрешает помещать в текстовую строку символ "=". Встречая его там, выдает ошибку. Итак рассмотрим применение функции exec().
Так же можно использовать способ моделирования динамической переменной. Когда создается словарь, в котором ключ соответствует имени переменной, а значение соответствует значению переменной. конец моего прим.) Теперь попробуйте Вы и попробую я динамически создать атрибут к объекту, который определен заранее и Вы в ходе программы динамически получаете имя атрибута в виде строки.
1
|
||||||
|
1 / 1 / 0
Регистрация: 04.03.2019
Сообщений: 70
|
||
| 04.10.2020, 10:53 [ТС] | ||
|
class.one.two(params=14332, fs=32e) и в классе допустим будет запрос к сайту ( без разницы что ) exampl.com/one/two?params=12312&fs=4234
0
|
||
|
|
|
| 04.10.2020, 11:43 | |
|
Динамические атрибуты - скользкая дорожка, польза от них сомнительна.
Это хорошо, когда кроме __getattr__ вы ещё переопределяете __dir__, причём чтобы он сумел сработать в нужное время. Либо задействовать интерфейс. В общем, сложно тут всё, лучше сделайте через class['one']['two'], куда меньше гемора будет.
1
|
|
|
|
||
| 04.10.2020, 12:11 | ||
|
P.S. И да, пока ты вообще не понимаешь зачем нужны такие атрибуты и где они применимы.
1
|
||
| 04.10.2020, 12:54 | ||||||
|
_shut_, Кстати Garry Galler, правильно говорит, есть возможности перехватывать не существующие атрибуты, и вставлять свои. Но я уже подзабыл, как это работает, то ли действительно создается новый атрибут, толи его имитация. Почитайте документацию.
Но с помощью функции exec все получилось, тоже все работает. Вот тестирующий пример.
1
|
||||||
|
|
||||||
| 04.10.2020, 13:05 | ||||||
|
Вот самая элементарная реализация динамики в атрибутах:
1
|
||||||
| 04.10.2020, 15:52 | ||||||
|
_shut_, То о чем говорит Garry Galler, описывается в книге
Лутц М. Изучаем Python (том 2, 5-е издание, 2019) Глава 38 "Управляемые атрибуты". Добавлено через 18 минут _shut_, Кстати я и забыл, для атрибутов пользовательских классов создание нового атрибута за пределами класса осуществляется действительно, как сказал Garry Galler, с помощью функции setattr.
Использование же функции exec() оптимально использовать для динамического создания простых переменных (не атрибутов), где не используются пользовательские классы и потому не применима функция setattr().
1
|
||||||
|
1 / 1 / 0
Регистрация: 04.03.2019
Сообщений: 70
|
||||||
| 04.10.2020, 17:05 [ТС] | ||||||
|
сделал так:
0
|
||||||
|
|
|
| 05.10.2020, 09:35 | |
|
_shut_, не обижайтесь, но плохо. Это показывает, что с ООП вообще и с питоном в частности у вас не айс. Рановато вам в динамические атрибуты.
0
|
|
| 05.10.2020, 09:35 | |
|
Помогаю со студенческими работами здесь
20
Создать класс, для работы с динамическими векторами Создать класс, для работы с динамическими векторами Создать динамический класс для выполнения операций с динамическими массивами чисел
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html
Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
|
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|