Iterating. A line still missing:
> ======================================================================== > ### Simple OO Framework > > class _O: pass > > def make_object(*procedures, base=None, bases=None): > o = _O() > methods = {} > o.__methods__ = methods > o.__derived__ = None > if base is not None: > _inherit_single(o, base) > elif bases is not None: > _inherit_multi(o, bases) > for procedure in procedures: > methods[procedure.__name__] = procedure > def method(*args, __procedure__=procedure, __dispatch__=True, > **kwargs): > if not __dispatch__ or o.__derived__ is None: > return __procedure__(*args, **kwargs) > derived = o > while derived.__derived__ is not None: > derived = derived.__derived__ > return getattr(derived, __procedure__.__name__)(*args, **kwargs) > setattr(o, procedure.__name__, method) > return o > > def _inherit_single(o, base): > methods = o.__methods__ > for name, method in base.__methods__.items(): > methods[name] = method > setattr(o, name, method) base.__derived__ = o > > def _inherit_multi(o, bases): > for base in bases: > _inherit_single(o, base) > > def delegate(method, *args, **kwargs): > return method(*args, __dispatch__=False, **kwargs) > > ### Used as follows > > def TCPClient(): > def connect(address): > pass > def shut_down(): > pass > return make_object(connect, shut_down) > > def SMTPClient(): > tcp_client = TCPClient() > def connect(address): > delegate(tcp_client.connect, address) > do_stuff() > def send_message(message): > pass > return make_object(connect, send_message, base=tcp_client) > > client = SMTPClient() > client.connect(None) > ======================================================================== -- https://mail.python.org/mailman/listinfo/python-list