use*_*618 45 python overloading
如何声明一些具有相同名称但在一个类中具有不同数量的参数或不同类型的方法?
我必须在这堂课中改变一下:
class MyClass:
    """"""
    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
    def my_method(self,parameter_A_that_Must_Be_String):
        print parameter_A_that_Must_Be_String
    def my_method(self,parameter_A_that_Must_Be_String,parameter_B_that_Must_Be_String):
        print parameter_A_that_Must_Be_String
        print parameter_B_that_Must_Be_String
    def my_method(self,parameter_A_that_Must_Be_String,parameter_A_that_Must_Be_Int):
        print parameter_A_that_Must_Be_String * parameter_A_that_Must_Be_Int
kef*_*hou 62
你可以拥有一个接受可变数量参数的函数.
def my_method(*args, **kwds):
    # do something
# when you call the method
my_method(a1, a2, k1=a3, k2=a4)
# you get: 
args = (a1, a2)
kwds = {'k1':a3, 'k2':a4}
所以你可以修改你的功能如下:
def my_method(*args):
    if len(args) == 1 and isinstance(args[0], str):
        # case 1
    elif len(args) == 2 and isinstance(args[1], int):
        # case 2 
    elif len(args) == 2 and isinstance(args[1], str):
        # case 3
Mar*_*ald 27
使用 Python 3.5 或更高版本,您可以@typing.overload为重载函数/方法提供类型注释。
来自文档:
@overload
def process(response: None) -> None:
    ...
@overload
def process(response: int) -> tuple[int, str]:
    ...
@overload
def process(response: bytes) -> str:
    ...
def process(response):
    <actual implementation>
小智 22
你不能.没有重载或多方法或类似的东西.一个名字指的是一件事.至于语言无论如何,你总是可以自己模仿它们......你可以检查类型isinstance(但请正确地做 - 例如在Python 2中,basestring用来检测字符串和unicode),但它很难看,一般不鼓励并且很少有用.如果方法做了不同的事情,请给它们不同的名称.考虑多态性.
简短的答案:您不能(请参见前面的讨论)。通常,您会使用类似的方法(可以添加更多类型检查和重新排序):
def my_method(self,parameter_A, parameter_B=None):
  if isinstance(parameter_B, int):
    print parameter_A * parameter_B
  else:
    print parameter_A
    if parameter_B is not None:
      print parameter_B