2016-07-20 19 views
2

私はPythonにはあまり新しくなく、私が学ばなければならないより難しいことの1つは、自己を正しく使う方法です。私の理解は私たちが自己を使うべき方法にある。しかし、私は以下のクラスをメソッドで持っていますが、私はポジション引数selfがないと言ってタイプエラーを出しています。TypeError:func1()missing 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'はクラス属性しているのではなく、インスタンス属性、および間で共有されることに注意してください:あなたのリストは同じ長さであれば、あなたのfuncがかもしれませんすべての '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. 

編集:この場合は、あなたは、静的メソッドを使用することができます。

class example(): 

    def func1(): 
     pass 

    func1() 

ただし、これはグローバル関数を作成するだけではないことに気付くはずです。だから私は、あなたが最初に推奨した方法を使う方法を見つけることをお勧めします。

+0

これを行う方法は、クラス内からメソッドを呼び出すことです。あなたはfunc1を 'self.func1(list1、list2)'のように呼び出す例を挙げましたが、これを行うと、selfは定義されていないというエラーが表示されます。 – bytes1234

+0

この例は私にとってはうまくいきます。新しいコードを編集として投稿することはできますか? – Rockybilly

+0

ここで私が避けようとしていることは、func2をfunc1呼び出していることです。私がしようとしているのはfunc1を呼び出すだけです。 – bytes1234

-1

あなたはクラスのfunc1外を呼び出そうとしている場合、私はPythonで専門家ではないんだけど、それはあなたを助けるかもしれないの下に試してみてください、

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

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) 

あなたが」クラス内にの機能を持たせようとしています。

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

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

両方の例は機能しません。 – DeepSpace

+0

インスタンスhaha @DeepSpaceが見つかりませんでした – jhwang

関連する問題