我正在尝试定义一个将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
如果我尝试使用类似这样的类中的方法获得类似的效果:
# 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)
似乎我错过了一些非常基本的东西,我们将非常感谢任何帮助。
答案 0 :(得分:6)
如果您希望test_method
能够访问您班级中的数据成员,则需要传递 self ,如下所示:
def test_method(self, par1, par2):
如果test_method
不需要访问类中的数据成员,则将其声明为静态方法:
@staticmethod
def test_method(par1, par2):
作为参考,假设您有一个包含数字的类,并且您希望在方法中返回所述数字,并且您有另一种方法可以提供两个数字的乘积,但不依赖于您班级中的任何内容。这是你如何做到的:
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)
打印:
4
6
答案 1 :(得分:2)
只需改变:
def test_method(par1, par2):
到
def test_method(self, par1, par2):