[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