Re:Implementing Function Overloading in Python
by anentropic on Thursday March 26, 2020 @11:41AM
(#22694641)
Yes I agree, if I was writing this for my own project I'm pretty sure I would do what you have done and use classes with an `area` method. (FWIW I think the dataclass approach is nicer for this example than namespacing separate `area` functions using modules)
You could define it as a typing.Protocol too.
My point was just that, even if for some reason you prefer function overloading, the restrictions needed to fit within the constraints of functool.singledispatch arguably lead to cleaner code than the complicated mess in the OP article.
This would look messy if you implemented as just a single function with variable no of kwargs that you sniffed in the body, and I don't think applying function overloading alone as OP has done solves the underlying problem.
Re:Implementing Function Overloading in Python
by BiteCode_dev on Thursday March 26, 2020 @12:44PM
(#22695379)
> My point was just that, even if for some reason you prefer function overloading, the restrictions needed to fit within the constraints of functool.singledispatch arguably lead to cleaner code than the complicated mess in the OP article.
Indeed. Less is more sometimes.
Re:Implementing Function Overloading in Python
by jakearmitage on Thursday March 26, 2020 @11:43AM
(#22694676)
Didn't know about @dataclass until now. Thank you.
Re:Implementing Function Overloading in Python
by oefrha on Thursday March 26, 2020 @12:53PM
(#22695470)
See also attrs http://www.attrs.org/ which is one of the main inspirations of py37 dataclass and is more feature-rich.
Re:Implementing Function Overloading in Python
by BiteCode_dev on Thursday March 26, 2020 @12:43PM
(#22695374)
Python 3.7+ only.
If you really want types, use classes. It removes the need for single dispatch, creates a self documenting namespace and saves you an import when you want to do the calculation.
@dataclass is of course not mandatory, and just make the code shorter.We are talking about very simple things here. No need to add complexity to them.