我是python中的“class”新手。我在python中创建了以下类。这个类的目标是,如果传递一个数字列表,如果2个数字的总和是50,它将返回列表中这些数字的位置。
from itertools import combinations
class numList(object):
def findComb(self):
a = []
b = []
for comb in combinations(self, 2):
a.append(comb)
for i in range(1, len(a)):
if sum(a[i]) == 50:
b.append(a[i])
return b
c = numList()
c.findComb([10,20,10,40,50,60,70])
但是当我尝试执行它时,我收到以下错误:
TypeError:findComb()需要1个位置参数但是2个被赋予
请让我知道我在哪里弄错了。
谢谢!
答案 0 :(得分:2)
按照设计,每个类函数的第一个参数始终是对类的当前实例的引用(始终命名为self
)。
当您将findComb
定义为仅使用一个self
时,您正在调用def findComb(self):
...
。
def findComb(self, myList):
...
应该是
self
您在函数实现中对myList
的所有引用都需要相应更新才能使用/c/Windows/Microsoft.NET/Framework/v4.0.30319/MSBuild.exe "MvcApplication1/MvcApplication1.sln" /t:MvcApplication
。
答案 1 :(得分:0)
除非添加@staticmethod decorator,否则类中的每个方法都将类本身的实例作为位置输入。
因此,您收到错误,因为函数findComb
收到输入:
这应该澄清您收到的错误。
您可以通过两种方式解决问题:
将输入列表分配给类的属性,然后使用函数中的属性:
class numList(object):
def __init__(self, inp_list):
self.input = inp_list
def findComb(self):
a = []
b = []
for comb in combinations(self.input, 2):
a.append(comb)
for i in range(1, len(a)):
if sum(a[i]) == 50:
b.append(a[i])
return b
c = numList([10,20,10,40,50,60,70])
c.findComb()
将findComb定义为staticmethod,以便它只使用您传递的参数(不使用实例作为第一个参数):
class numList(object):
@staticmethod
def findComb(inp_list):
a = []
b = []
for comb in combinations(inp_list, 2):
a.append(comb)
for i in range(1, len(a)):
if sum(a[i]) == 50:
b.append(a[i])
return b
c = numList()
c.findComb([10,20,10,40,50,60,70])