Python 如何编写一个可以使用不同数量的参数调用的方法?

Python 如何编写一个可以使用不同数量的参数调用的方法?,python,Python,我的代码如下: class A: def TestMethod(self): print 'first method' def TestMethod(self, i): print 'second method', i ob = A() ob.TestMethod() ob.TestMethod(10) 这是一个错误 Traceback (most recent call last): File "stack.py", line 9, in

我的代码如下:

class A:
    def TestMethod(self):
        print 'first method'

    def TestMethod(self, i):
        print 'second method', i

ob = A()
ob.TestMethod()
ob.TestMethod(10)
这是一个错误

Traceback (most recent call last):
File "stack.py", line 9, in <module>
    ob.TestMethod()
TypeError: TestMethod() takes exactly 2 arguments (1 given)
回溯(最近一次呼叫最后一次):
文件“stack.py”,第9行,在
ob.TestMethod()
TypeError:TestMethod()正好接受2个参数(给定1个)

我怎样才能拥有一个可以用不同数量的参数调用的方法?

Python不支持方法重载。这在动态类型语言中非常常见,因为在静态类型语言中,方法是通过其完整签名(名称、返回类型、参数类型)来标识的,而动态类型语言只通过名称来标识。所以它就是不能工作

但是,您可以通过指定默认参数值将功能放在方法中,然后可以检查是否有人指定了值:

class A:
    def TestMethod(self, i = None):
        if i is None:
            print 'first method'
        else:
            print 'second method', i

Python不支持方法重载。这在动态类型语言中非常常见,因为在静态类型语言中,方法是通过其完整签名(名称、返回类型、参数类型)来标识的,而动态类型语言只通过名称来标识。所以它就是不能工作

但是,您可以通过指定默认参数值将功能放在方法中,然后可以检查是否有人指定了值:

class A:
    def TestMethod(self, i = None):
        if i is None:
            print 'first method'
        else:
            print 'second method', i

如果您只想选择性地传递一个参数,那么可以使用poke的解决方案。如果您真的想提供对大量可选参数的支持,那么应该使用args和kwargs

class A:
    def TestMethod(self, *args):
        if not args:
            print 'first method'
        else:
            print 'second method', args[0]

如果您只想选择性地传递一个参数,那么可以使用poke的解决方案。如果您真的想提供对大量可选参数的支持,那么应该使用args和kwargs

class A:
    def TestMethod(self, *args):
        if not args:
            print 'first method'
        else:
            print 'second method', args[0]

如何做到这一点?您是如何尝试实现这一点的?在python中,重载并不常见(但使用decorator等也不是不可能)。改用关键字参数
deftestmethod(self,i=None)
。然后检查i和switch behavior查看*args和**kwargs以向函数提供变量,但请注意,pylint等静态分析工具不鼓励这样做,它们会因为编写复杂代码而责骂您如何实现这一点?您是如何尝试实现这一点的?在python中,重载并不常见(但使用decorator等也不是不可能)。改用关键字参数
deftestmethod(self,i=None)
。然后检查i和switch behavior查看*args和**kwargs以向函数提供变量,但请注意,pylint等静态分析工具不鼓励这样做,它们会因为编写复杂的代码而对您进行批评