定义类时出错

时间:2017-07-20 12:30:54

标签: python

我是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个被赋予

请让我知道我在哪里弄错了。

谢谢!

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收到输入:

  1. 实例(默认情况下)
  2. 您传递的列表
  3. 这应该澄清您收到的错误。

    您可以通过两种方式解决问题:

    将输入列表分配给类的属性,然后使用函数中的属性:

    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])