如何将列表作为参数传递给方法

use*_*409 1 python parameters methods class list

我正在尝试定义一个方法,它将python列表作为其输入参数之一.相比之下,常规函数接受列表作为输入参数没有问题.怎么会?

    # Simple function that works
    def func(param1, param2):
    for item in param1:
        print item+" "+param2

    var1 = ['sjd', 'jkfgljf', 'poipopo', 'uyuyuyu']
    var2 = 'is nonsense'

    func(var1, var2)

    # Simple function produces the following output:
    # sjd is nonsense
    # jkfgljf is nonsense
    # poipopo is nonsense
    # uyuyuyu is nonsense
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用类中的方法获得类似的效果:

   # Simple class
    class test():
        def __init__(self):
            pass

        def test_method(par1, par2):
            for itm in par1:
                print itm+" "+par2

    # This executes with no error
    obj = test()

    # This fails
    obj.test_method(var1, var2)

    # Error message will be:
    #   Traceback (most recent call last):
    #     File "<stdin>", line 1, in <module>
    #   TypeError: test_method() takes exactly 2 arguments (3 given)
Run Code Online (Sandbox Code Playgroud)

似乎我错过了一些非常基本的东西,任何帮助将不胜感激.

Ste*_* P. 6

如果您想要test_method访问类中的数据成员,那么您需要传递self,如下所示:

def test_method(self, par1, par2):
Run Code Online (Sandbox Code Playgroud)

如果test_method不需要访问类中的数据成员,则将其声明为静态方法:

@staticmethod
def test_method(par1, par2):
Run Code Online (Sandbox Code Playgroud)

作为参考,假设您有一个包含数字的类,并且您希望在方法中返回所述数字,并且您有另一种方法可以提供两个数字的乘积,但不依赖于您班级中的任何数字.这是你如何做到的:

class myClass(object):
    def __init__(self, num):
        self.number = num

    def getNum(self):
        return self.number

    @staticmethod
    def product(num1,num2):
        return num1*num2

if __name__ == "__main__":
    obj = myClass(4)
    print obj.getNum()
    print myClass.product(2,3)
Run Code Online (Sandbox Code Playgroud)

印刷品:
4
6