[PEAK] Rules override
Sergey Schetinin
maluke at gmail.com
Sat Mar 1 04:50:15 EST 2008
May I suggest adding `override' to the library itself. Sometimes
tailing facilities of `next_method' are not enough.
>>> from peak.rules import *
>>> class FullOverride(Method):
... def merge(self, other):
... return self
...
>>> always_overrides(FullOverride, Method)
>>> override = FullOverride.make_decorator(
... "override",
... """
... Completely override normal ``when`` rules.
... Priority is given to earlier overrides when resolving
any AmbiguousMethods.
... """)
>>> @abstract
... def mult(a, b):
... pass
...
>>> @when(mult, (str, int))
... def mult_str_int(a, b):
... return [a for i in range(b)]
...
>>> @override(mult, (list,))
... def mult_list(a, b):
... return [mult(item, b) for item in a]
...
>>> @override(mult, (object, list))
... def mult_by_list(a, b):
... return [mult(a, item) for item in b]
...
>>> print mult(['a','b'], [1,2])
[[['a'], ['a', 'a']], [['b'], ['b', 'b']]]
>>> @override(mult, (list, list))
... def mult_lists(a, b):
... return [mult(ai,bi) for ai,bi in zip(a,b)]
...
>>> print mult(['a','b'], [1,2])
[['a'], ['b', 'b']]
--
Best Regards,
Sergey Schetinin
http://s3bk.com/ -- S3 Backup
http://word-to-html.com/ -- Word to HTML Converter
More information about the PEAK
mailing list