Вызов вложенных несколько раз методов по имени
введите сюда код
[![введите сюда описание изображения][1]][1]есть необходимость вызвать метод, например:
self.container.font.setPointSize(10)
Но сделать это нужно зная имена(динамически получаемые)
Попробовал через:
command_parent = getattr(self.container, parent.text())
command = getattr(command_parent(), command_name_parameter)
command(10)
в этом случаи ничего не происходит, сами методы получаются, но не исполняется.
Через exec тоже не получилось, выдает синтаксическую ошибку.(знаю что не безопасно)
command = f"{self.container}.{parent.text()}().set{ property[:1].upper() + property[1:]}(10)"
print(command)
exec(command)
File "<string>", line 1
<PySide6.QtWidgets.QPushButton(0x1e67421dd80) at 0x000001E6757D22C0>.font().setPointSize(10)
^
SyntaxError: invalid syntax
Что можно сделать или я где то с кодом ошибся?
Пример как приходят данные, таких свойств дофига, поэтому ручками вводить все команды сложно и долго:
{
"name": "font",
"type": "QFont",
"widget_type": "QWidget",
"parameters": [
{
"name": "family",
"type": "QString"
},
{
"name": "PointSize",
"type": "int"
},
{
"name": "bold",
"type": "bool"
},
{
"name": "italic",
"type": "bool"
},
{
"name": "underline",
"type": "bool"
},
{
"name": "strikeout",
"type": "bool"
},
{
"name": "kerning",
"type": "bool"
}
]
}
Ответы (1 шт):
Автор решения: Amgarak
→ Ссылка
Если я вас правильно понял:
class Main:
def __init__(self):
self.container = Container()
parent_text = "setPointSize"
getattr(self.container.font, parent_text)(12)
class Container:
def __init__(self):
self.font = Font()
parent_text = "setPointSize"
getattr(self.font, parent_text)(11)
class Font:
def setPointSize(self, size):
print(f"Size: {size}")
Main()
container = Container()
getattr(container.font, "setPointSize")(10)
Вывод:
Size: 11
Size: 12
Size: 11
Size: 10
[Program finished]