I have to overload a python function with parameters of different sizes. I can do it and I can do run-time check of incorrect calls, see below. Is it possible to make mypy check for incorrect usage? I am using python-3.7.3 and mypy-0.770.
from functools import singledispatch
class A:
def __init__(self) -> None:
self.dummy = 0
class B:
def __init__(self) -> None:
self.dummy = 1
@singledispatch
def base(arg, *args) -> None:
del arg, args # Not used
# It should not be called
print("unexpected call to dummy base")
@base.register
def xa(arg: A, val0: int, sval: str="") -> None:
del arg # Not used
if not isinstance(sval, str) :
print("bad call to a-variant")
return
print("called a-variant: val0={} sval='{}' ".format(val0, sval))
@base.register
def xb(arg: B, val0: int, val1: int, sval: str ="") -> None:
del arg # Not used
print("called b-variant: val0={} val1={} sval='{}'".format(val0, val1, sval))
def test() -> None:
base(A(), 10)
base(A(), 11, "xxx")
base(B(), 10, 20)
base(B(), 11, 22, "yyy")
# Bad
base(A(), 10, 20)