Feb-10-2018, 06:49 AM
(This post was last modified: Feb-10-2018, 06:49 AM by Gribouillis.)
There is no overloading in python as there is in C++ for example.
Usually one uses a different name instead of overloading
For ordinary functions (as opposed to instance methods), there is a selection mechanism on the type of the first argument: see functools.singledispatch(). This allows one to implement generic functions in python.
Usually one uses a different name instead of overloading
class A: def do_work(self, obj): print('A.do_work:', obj) def do_work_by_name(self, name): print('A.do_work_by_name:', name) self.do_work([name]) a = A() x = object() a.do_work(x) a.do_work_by_name('spam') """O utput: A.do_work: <object object at 0x7f63f51cb0a0> A.do_work_by_name: spam A.do_work: ['spam'] """On the other hand we can override functions, especially in subclasses:
class B(A): def do_work(self, name): print('B.do_work:', name) obj = [name] A.do_work(self, obj) # or super().do_work(obj) b = B() b.do_work('eggs') """ Output: B.do_work: eggs A.do_work: ['eggs'] """If you really want automatic selection on the type of the argument, you can write it yourself
class D(A): def do_work(self, arg): print('D.do_work:', arg) if isinstance(arg, str): obj = [arg] else: obj = arg super().do_work(obj) d = D() d.do_work('eggs') """ Output: D.do_work: eggs A.do_work: ['eggs'] """It is not usually considered very good code however.
For ordinary functions (as opposed to instance methods), there is a selection mechanism on the type of the first argument: see functools.singledispatch(). This allows one to implement generic functions in python.