Marko Rauhamaa <ma...@pacujo.net>: > Ok, here's a quick port that have barely tried out:
And here's a more complete port (with some possible dunder abuse): ======================================================================== ### 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) 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) ======================================================================== Marko -- https://mail.python.org/mailman/listinfo/python-list