定义类时出错

2024-09-30 00:26:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python的“类”还不熟悉。我用python创建了以下类。这个类的目标是,如果传递一个数字列表,如果两个数字的和是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() takes 1 positional argument but 2 were given

请让我知道我在哪里犯错

谢谢你


Tags: infromimportself目标列表for数字
2条回答

类中的每个方法都将类本身的实例作为位置输入,除非添加@staticmethod decorator

因此您收到错误是因为函数findComb作为输入接收:

  1. 实例(默认情况下)
  2. 你通过的名单

这应该澄清你收到的错误

您可以通过两种方式修复它:

将输入列表指定给类的属性,然后在函数中使用该属性:

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

根据设计,每个类函数的第一个参数总是对类的当前实例的引用(总是命名为self

当您将findComb定义为只接受一个(self)时,您正在用一个附加参数调用它

def findComb(self):
    ...

应该是

def findComb(self, myList):
    ...

函数实现中对self的所有引用都需要相应地更新才能使用myList

相关问题 更多 >

    热门问题