Pythonic способ узнать, в каком родителе был определен атрибут ⇐ Python
-
Гость
Pythonic способ узнать, в каком родителе был определен атрибут
Если у меня есть это дерево классов:
@dataclass класс Родитель(): р: интервал = 42 @dataclass класс Ребенок (Родитель): в: интервал = 0 объект = Ребенок() Из объекта obj можно легко узнать, что p был определен в Parent и c в Child?
Я прохожу через __mro__ сверху, получаю список атрибутов и, спускаясь ниже по иерархии, получаю новые еще не определенные атрибуты. Это работает, но мне интересно, есть ли более питонический способ.
Изменить: контекст
Речь идет об автоматически создаваемых классах, описывающих реальные электрические сети.
Изображение, имеющее эти 3 класса, определяющее дерево:
Класс [*]Оборудование, определяющий имя [*]Проводящее оборудование, определяющее сопротивление [*]Кабель, определяющий материал.
Конечно, будет больше типов оборудования и больше типов проводящего оборудования. Для этого существует один стандартный формат обмена, который требует указания полного имени атрибута, то есть Equipment.name даже для Cable.
Так что в этом, по общему признанию, странном контексте мне действительно нужно это сделать.
Если у меня есть это дерево классов:
@dataclass класс Родитель(): р: интервал = 42 @dataclass класс Ребенок (Родитель): в: интервал = 0 объект = Ребенок() Из объекта obj можно легко узнать, что p был определен в Parent и c в Child?
Я прохожу через __mro__ сверху, получаю список атрибутов и, спускаясь ниже по иерархии, получаю новые еще не определенные атрибуты. Это работает, но мне интересно, есть ли более питонический способ.
Изменить: контекст
Речь идет об автоматически создаваемых классах, описывающих реальные электрические сети.
Изображение, имеющее эти 3 класса, определяющее дерево:
Класс [*]Оборудование, определяющий имя [*]Проводящее оборудование, определяющее сопротивление [*]Кабель, определяющий материал.
Конечно, будет больше типов оборудования и больше типов проводящего оборудования. Для этого существует один стандартный формат обмена, который требует указания полного имени атрибута, то есть Equipment.name даже для Cable.
Так что в этом, по общему признанию, странном контексте мне действительно нужно это сделать.