0
  • 我试图在 python 中发现 5 种变量类型的多态 sum 函数:strintfloatcomplexbool

这是我找到的工作解决方案

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

第二种方式,它部分有效,但我不能同时支持strnumber

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])
4

0 回答 0