У меня есть такой класс:
class Item:
def __init__(self, name: str, label: str, children: Callable[..., Gtk.Widget]) -> None:
self.label = Gtk.Label(label)
[...]
self._children = children()
[...]
def __getattr__(self, item):
children = super().__getattribute__('_children')
return children.__getattribute__(item)
Так что я могу делать такие вещи:
item = Item(name, 'label', Gtk.Entry)
item.set_text('text') # it'll return result from item._children.set_text
item.label.set_text('text') # it'll return result from item.label.set_text
, но я не могу получить доступ к экземпляру напрямую, потому что он возвращает 'Item'вместо экземпляра 'children':
print(type(item)) # it'll return <class 'Item'> instead <class 'Gtk.Entry'>
Я пытался написать собственный метод __new__
, но кажется невозможным изменить экземпляр на _children без потери доступа к экземпляру по умолчанию (таким образом, я не могудоступ к item.label).
Любое предложение?
PS: «дети» могут быть любыми Gtk.Widget