2016-07-20 126 views
2

我對python非常陌生,而且我不得不學習的一個更難的事情是如何正確使用自我。我的理解是我們應該使用自我的方法。然而,我有一個方法以下類,我得到一個類型錯誤,說我錯過了自我的位置參數。TypeError: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'是類屬性而不是一個實例的屬性,並將之間共享所有「示例」實例。 – DeepSpace

回答

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

但是,您應該認識到,這並不比創建全局函數好得多。所以我建議你找到一種使用我推薦的第一種方法。

+0

我試圖做到這一點的方式是從課堂內部調用方法。你舉了一個例子,你把func這個稱爲'self.func1(list1,list2)',但是當我這樣做時,我仍然得到錯誤,說自己沒有定義。 – 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

錯過了實例哈哈@DeepSpace – jhwang

相關問題