Избегайте предупреждения Pylint E1101: «Экземпляр .. не имеет .. члена» для класса с динамическими атрибутами. ⇐ Python
Избегайте предупреждения Pylint E1101: «Экземпляр .. не имеет .. члена» для класса с динамическими атрибутами.
Представьте себе функцию, которая динамически добавляет атрибуты к объекту с помощью setattr. Причина этого в том, что я хочу сопоставить некоторую внешнюю структуру (например, заданное дерево параметров) с объектом:
my_object = SomeClass() apply_structure (my_object, some_descriptor) my_object.device1.enabled = Истина Технически это работает, но, конечно, Пылинт справедливо жалуется на то, что «device1» не является членом SomeClass.
Я мог бы отключить предупреждение, но это было бы плохо (потому что я все равно хочу получать предупреждение во всех случаях, когда атрибут не существует из-за орфографической ошибки и т. д.).
Существует ли распространенный и законный (устойчивый к Pylint) способ динамического добавления членов к объекту, который не приводит к предупреждениям?
Альтернатива: могу ли я отключить Pylint только для одного объекта, а не для строки/блока/файла?
Объяснение:
Вы можете задаться вопросом, почему я должен динамически оснащать объект атрибутами-членами, если позже я планирую получить доступ к этим атрибутам жестко запрограммированным способом.
Причина: у меня есть динамическая часть программы (где происходит оформление) и статическая часть, которая специализирована для определенного сценария. Поэтому я мог бы также создать статический класс для этого сценария, но во многих ситуациях это было бы излишним.
Следующий специализированный код может разрешить доступ к некоторым параметрам устройства, которое может быть подключено к какой-либо шине:
класс MyDeviceHandler: on_get_some_subtree_element (сам): вернуть _some_internal_value on_set_some_subtree_element (я, значение): _some_internal_value = значение разработчик = MyDeviceHandler() Decoration_object_with_device_structure (dev, 'некоторые/прикрепленные/устройства') dev.some.subtree.element = 5 #
Представьте себе функцию, которая динамически добавляет атрибуты к объекту с помощью setattr. Причина этого в том, что я хочу сопоставить некоторую внешнюю структуру (например, заданное дерево параметров) с объектом:
my_object = SomeClass() apply_structure (my_object, some_descriptor) my_object.device1.enabled = Истина Технически это работает, но, конечно, Пылинт справедливо жалуется на то, что «device1» не является членом SomeClass.
Я мог бы отключить предупреждение, но это было бы плохо (потому что я все равно хочу получать предупреждение во всех случаях, когда атрибут не существует из-за орфографической ошибки и т. д.).
Существует ли распространенный и законный (устойчивый к Pylint) способ динамического добавления членов к объекту, который не приводит к предупреждениям?
Альтернатива: могу ли я отключить Pylint только для одного объекта, а не для строки/блока/файла?
Объяснение:
Вы можете задаться вопросом, почему я должен динамически оснащать объект атрибутами-членами, если позже я планирую получить доступ к этим атрибутам жестко запрограммированным способом.
Причина: у меня есть динамическая часть программы (где происходит оформление) и статическая часть, которая специализирована для определенного сценария. Поэтому я мог бы также создать статический класс для этого сценария, но во многих ситуациях это было бы излишним.
Следующий специализированный код может разрешить доступ к некоторым параметрам устройства, которое может быть подключено к какой-либо шине:
класс MyDeviceHandler: on_get_some_subtree_element (сам): вернуть _some_internal_value on_set_some_subtree_element (я, значение): _some_internal_value = значение разработчик = MyDeviceHandler() Decoration_object_with_device_structure (dev, 'некоторые/прикрепленные/устройства') dev.some.subtree.element = 5 #
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение