Python是否允许类方法有多个输入参数?

时间:2014-08-05 16:08:11

标签: python methods operator-overloading

我似乎无法在互联网上找到这个问题的答案。在Python中,我能做到这样的事情:

class MyClass(object):
    """It's my class, yo!"""
    def __init__(self, string_of_interest_1):
        self.string1 = string_of_interest_1
        self.string2 = None
        self.int1 = None
    def __init__(self, string_of_interest_1, string_of_interest2):
        self.string1 = string_of_interest_1
        self.string2 = string_of_interest_2
        self.int1 = None
    def __init__(self, int_of_interest_1):
        self.string1 = None
        self.string2 = None
        self.int1 = int_of_interest_1

我称之为“方法重载”,但似乎标准重载是当我有一些变量时,我在调用本身内分配了一个默认值。 (例如,def __init__(self, string_of_interest_1, string_of_interest_2 = None))虽然这个小例子没有证明它,但我希望有可能拥有真正不同的方法,具体取决于传递给它的参数的数量和类型。

谢谢!

3 个答案:

答案 0 :(得分:2)

在python中没有函数或方法的重载,但是有一个变化 - * args和** kwargs。例如:

>>def test(*args, **kwargs):
>>    print args # list of positional parametrs
>>    print kwargs # dict of named parametrs

>>test(1, 2, test_param='t')
[1, 2]
{test_param: 't'}

答案 1 :(得分:1)

Python中的所有变量都是对象,即使int也是对象。

CJAVA等中使用的方法覆盖。

Python有魔术变量****用于位置参数,**用作关键字参数

试试这个

def test_method(*args, **kwargs):
    print args
    print kwargs

使用不同的不同参数调用此函数,您将了解这些神奇的方法。

答案 2 :(得分:1)

即使您的函数不知道数字,您也可以获取所需的所有参数。语法是使用符号*来接受可变数量的参数;按照惯例,它经常与args这个词一起使用。 * args允许你做的是接受比你之前定义的正式参数的正常更多的参数。检查此主题以查看如何执行此操作的示例

  

*args and **kwargs?