2016-07-20 2 views
2

Im довольно новый для python и один из самых сложных вещей, которые мне нужно изучить, - как правильно использовать себя. Мое понимание заключается в методах, которые мы должны использовать самостоятельно. Однако у меня есть следующий класс с методом, и я получаю ошибку типа, говоря, что мне не хватает позиционного аргумента.ТипError: func1() отсутствует 1 обязательный позиционный аргумент: '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' 
+0

не является причиной ошибки, но обратите внимание, что '' list1' и list2' являются атрибутами класса, а не атрибуты экземпляра, и будет распределяться между все экземпляры 'example'. – DeepSpace

ответ

1

Функция, которую определяют как func1 является method. Который должен использоваться в экземпляре этого класса. Такие, как,

abc = example() # We create the instance 

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

self представляет abc здесь.

Если вы собираетесь называть его в классе, вам нужно использовать сам себя, который заменит имя экземпляра, если он вызван снаружи.

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

Edit: В этом случае, вы можете использовать статические методы.

class example(): 

    def func1(): 
     pass 

    func1() 

Однако вы должны понимать, что это не намного лучше, чем просто создание глобальной функции. Поэтому я предлагаю вам найти способ использования первых способов, которые я рекомендовал.

+0

Способ, которым я пытаюсь это сделать, - вызвать метод из класса. Вы дали один пример, где вы вызываете func, например, этот «self.func1 (list1, list2)», однако, когда я это делаю, я все еще получаю сообщение об ошибке «self». – bytes1234

+0

Этот пример работает для меня, не могли бы вы опубликовать свой новый код в качестве редактирования. – Rockybilly

+0

Единственное, что я вижу здесь, что я пытаюсь избежать, - это func2 func1. То, что я пытаюсь сделать, это просто вызвать func1. – bytes1234

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

Оба ваших примера не работают. – DeepSpace

+0

Пропущен экземпляр haha ​​@DeepSpace – jhwang

Смежные вопросы