FishHook
o7412369815963, так Вы предложИте, там и посмотрим, что получится целесообразней
Ну, например так - то же самое, но метакласс заменил на класс:
class Meta(object):
@property
def class_list(self):
for v in map(lambda k:getattr(self, k), dir(self)):
if hasattr(v, "register"):
yield v
class BaseChild(object):
def register(self):
print "register ", self, "parent", self.parent
class Base(Meta):
class ChildA(BaseChild): pass
class ChildB(BaseChild): pass
def __init__(self):
for cls in self.class_list:
obj = cls()
obj.parent = self
setattr(self, cls.__name__.lower(), obj)
obj.register()
a = Base()
Обычно метаклассы используют там где “штатно” не выходит. Конечно на метаклассах тоже вариант, и можно было-бы пойти дальше - заюзать какие-нибудь C-extention, но зачем?