TypeError:func1()缺少1个必需的位置参数:' self'

时间:2016-07-20 17:08:48

标签: python python-3.x

我是python的新手,我必须学习的更难的事情之一是如何正确使用自我。我的理解是我们应该使用自己的方法。但是我有一个方法的下面的类,我得到一个类型错误说我错过了位置参数self。

class example():

    list1 = ['a','b','c','d']
    list2 = ['1','2','3','4']

    def func1(self, list1, list2):

        i = 1
        for item in list1:
            print(list1)
            print(list2[i])
            i +=1

    func1(list1=list1, list2=list2)

#error seen below

<ipython-input-2-d17d317756a0> in <module>()
----> 1 class example():
      2 
      3     list1 = ['a','b','c','d']
      4     list2 = ['1','2','3','4']
      5 
<ipython-input-2-d17d317756a0> in example()
     11             print(list2[i])
     12 
---> 13     func1(list1=list1, list2=list2)

TypeError: func1() missing 1 required positional argument: 'self'

3 个答案:

答案 0 :(得分:1)

您定义为func1的功能是method。哪个需要在该类的实例上使用。如,

abc = example() # We create the instance

abc.func1() # This is how you call a method.

self代表abc

如果你打算在课堂上调用它,你需要使用self本身,如果在外面调用,它将替换为实例名称。

Class example():
    def func1(self):
        #stuff
    def func2(self):
        self.func1() # This is the usage.

编辑:在这种情况下,您可以使用静态方法。

class example():

    def func1():
        pass

    func1()

但是你应该意识到这并不比创建一个全局函数好多少。所以我建议你找到一种方法来使用我推荐的第一种方式。

答案 1 :(得分:0)

如果您尝试在课堂外拨打func1

class Example():
    def func1(self, list1, list2):
        i = 0
        for item in list1:
            print(item)
            print(list2[i])
            i +=1

list1 = ['a','b','c','d']
list2 = ['1','2','3','4']
a = Example()
a.func1(list1,list2)

如果您尝试在班级中使用func1的功能:

class Example():
    list1 = ['a','b','c','d']
    list2 = ['1','2','3','4']

    def func1(self):
        i = 0
        for item in self.list1:
            print(item)
            print(self.list2[i])
            i +=1

a = Example()
a.func1()

或者,如果您的列表长度相同,则您的func可以是:

def func1(self, list1, list2):
    for i in range(len(list1)):
        print(list1[i])
        print(list2[i])

答案 2 :(得分:-1)

我不是蟒蛇专家,但请尝试以下它可能对你有帮助,

class example():

    list1 = ['a','b','c','d']
    list2 = ['1','2','3','4']

    def func1(list1, list2):

        i = 1
        for item in list1:
            print(list1)
            print(list2[i])
            i +=1

    func1(list1=list1, list2=list2)