- 我试图在 python 中发现 5 种变量类型的多态 sum 函数:str、int、float、complex、bool。
这是我找到的工作解决方案:
sum("W", "T", "F") #return WTF
sum(1, 2, 3) #return 6
@staticmethod
def sum(a: None, b: None, c: None) -> object:
return a + b + c
- 我尝试了其他两种方法,但它们没有按预期工作。
第一种方式,Python 不识别类型:它只是调用最后一个 sum 函数并返回错误
sum("W", "T", "F") #*TypeError: unsupported operand type(s) for +=: 'int' and 'str'*
@staticmethod
def sum(*args: str) -> str:
sum_str = ""
for el_str in args:
sum_str = sum_str + el_str
return sum_str
@staticmethod
def sum(*args: int) -> int:
sum = 0
for el_int in args:
sum += el_int
return sum
@staticmethod
def sum(*args: float) -> float:
sum = 0
for el_float in args:
sum += el_float
return sum
@staticmethod
def sum(*args: complex) -> complex:
sum = 0
for el_complex in args:
sum += el_complex
return sum
@staticmethod
def sum(*args: bool) -> bool:
sum = 0
for el_bool in args:
sum += el_bool
return sum
第二种方式,它部分有效,但我不能同时支持str和number。
sum("W", "T", "F") #return WTF
sum(1, 2, 3) #return 6
def sum_generic(*args: T) :
sum_gen = 0 #sum_gen = ""
for el in args:
sum_gen = sum_gen + el
return sum_gen
问题:
- 为什么第一种方法不能按预期工作?
- 在第二种方式中,如何将正确的类型分配给 sum_gen ?像 sum_gen: type(args[0])