Ja, die Ursprungsidee stammt aus Toscawidgets
Und ja, urspruenglich wurde es dort per children-Array gemacht, dieser Ansatz ist aber laut Aussage der Devs mittlerweile obsolet/deprecated und es wird per direkter Definition gemacht. Nach etwas wuehlen im Toscawidgets-Code habe ich gerade folgende Passage gefunden, die dafuer verantwortlich ist (denke ich zumindest)
Code: Alles auswählen
def __new__(meta, name, bases, dct, **kw):
if name != 'Widget' and 'children' not in dct:
new_children = []
for d, v in dct.items():
if isinstance(v, type) and issubclass(v, Widget) and d not in reserved_names:
new_children.append((v, d))
del dct[d]
children = []
for b in bases:
bcld = getattr(b, 'children', None)
if bcld and not isinstance(bcld, RepeatingWidgetBunchCls):
children.extend(bcld)
new_children = sorted(new_children, key=lambda t: t[0]._seq)
children.extend(hasattr(v, 'id') and v or v(id=d) for v,d in new_children)
if children:
dct['children'] = children
widget = type.__new__(meta, name, bases, dct)
widget._seq = _widget_seq.next()
for w in reversed(widget.__mro__):
if 'post_define' in w.__dict__:
w.post_define.im_func(widget)
return widget
Da bin ich aber noch nicht ganz durchgestiegen. Werd da mal etwas weiterwuehlen
