basic language question
Alex Martelli
aleax at aleax.it
Fri Sep 5 09:23:52 EDT 2003
Terry Reedy wrote:
...
> 'Returners' could wrap no-return mutators with functions or
> derived-class methods that do return the object, but I have never seen
> anyone post a complete module that does so for, say, all list
> mutators.
What about...:
def wrapReturning(func):
def returningWrapper(*args, **kwds):
func(*args, **kwds)
return args[0]
return returningWrapper
class metaReturner(type):
''' simplified metaReturner: deal with single inheritance only '''
def __new__(mcl, className, classBases, classDict):
# get the "real" base class, then wrap its mutators
for base in classBases:
if not isinstance(base, metaReturner):
for mutator in classDict['__mutators__']:
classDict[mutator] = wrapReturning(getattr(base,
mutator))
break
# delegate the rest to built-in 'type'
return type.__new__(mcl, className, classBases, classDict)
class Returner: __metaclass__ = metaReturner
# example usage
class returnerlist(Returner, list):
__mutators__ = 'sort reverse append extend insert'.split()
print returnerlist('hello').extend('ciao').sort().reverse()
Alex
More information about the Python-list
mailing list