由于python 3.5函数参数可以使用类型声明,但是似乎不支持按参数类型重载。具体来说,我有一个旧的类定义
class Supplies:
def __init__(self, supp):
if isinstance(supp, list):
self.food = supp[0]
self.water = supp[1]
else:
self.food = supp
self.water = supp
,并希望将构造函数转换为使用类型声明。像这样:
class Supplies:
def __init__(self, supp: List[int]):
self.food = supp[0]
self.water = supp[1]
def __init__(self, supp: int):
self.food = supp
self.water = supp
,不同之处在于它会覆盖而不是重载__init__
。在这里有一个明智的解决方法(因为它是构造函数,所以我不能简单地使用两个不同的函数名)?
答案 0 :(得分:1)
找到了公开所需界面的解决方案:
SupplyData = TypeVar('SupplyData', List[int], int)
class Supplies:
def __init__(self, supp: SupplyData):
if isinstance(supp, list):
self.food = supp[0]
self.water = supp[1]
else:
self.food = supp
self.water = supp
或具有上面注释中建议的匿名类型:
class Supplies:
def __init__(self, supp: Union[List[int], int]):
if isinstance(supp, list):
self.food = supp[0]
self.water = supp[1]
else:
self.food = supp
self.water = supp