[Python-checkins] r43727 - sandbox/trunk/overload/overloading.py sandbox/trunk/overload/test_overloading.py
guido.van.rossum
python-checkins at python.org
Sat Apr 8 01:11:01 CEST 2006
Author: guido.van.rossum
Date: Sat Apr 8 01:11:00 2006
New Revision: 43727
Modified:
sandbox/trunk/overload/overloading.py
sandbox/trunk/overload/test_overloading.py
Log:
Add a __get__ method so you can create @overloaded methods inside classes.
Modified: sandbox/trunk/overload/overloading.py
==============================================================================
--- sandbox/trunk/overload/overloading.py (original)
+++ sandbox/trunk/overload/overloading.py Sat Apr 8 01:11:00 2006
@@ -26,6 +26,8 @@
"""
+import new
+
# Make the environment more like Python 3.0
__metaclass__ = type
from itertools import izip as zip
@@ -40,6 +42,11 @@
self.cache = {}
self.default_func = default_func
+ def __get__(self, obj, type=None):
+ if obj is None:
+ return self
+ return new.instancemethod(self, obj)
+
def register(self, *types):
"""Decorator to register an implementation for a specific set of types.
Modified: sandbox/trunk/overload/test_overloading.py
==============================================================================
--- sandbox/trunk/overload/test_overloading.py (original)
+++ sandbox/trunk/overload/test_overloading.py Sat Apr 8 01:11:00 2006
@@ -106,6 +106,24 @@
self.assertEqual(foo("x", C()), "default")
self.assertEqual(foo("x", 123), "default")
+ def test_3(self):
+ # Ensure that you can use @overloaded for regular methods
+ class C:
+ @overloaded
+ def whatever(self, arg):
+ return "whatever(%r)" % (arg,)
+ @whatever.register(object, int)
+ def whatever_int(self, arg):
+ return "whatever(%x)" % arg
+ @whatever.register(object, str)
+ def whatever_str(self, arg):
+ return "whatever(%s)" % arg
+ a = C()
+ self.assertEqual(a.whatever(10), "whatever(a)")
+ self.assertEqual(a.whatever("abc"), "whatever(abc)")
+ self.assertEqual(a.whatever([1]), "whatever([1])")
+ self.assertEqual(C.whatever(a, 10), "whatever(a)")
+
if __name__ == "__main__":
unittest.main()
More information about the Python-checkins
mailing list