0

次のようupに、クラス内の1つのパラメーターを使用して関数を定義しようとしています。X

class X:

    def __init__(self):
        self.elem=[]

    def i(self, new):
        self.elem.append(new)
        self.up(self,len(self.elem)-1)                    <= error here

    def up(self, n):
        print n

border = X()

a = [2,4,3,1]

for i in a:
    border.i (i)

エラーは次のようになります。

$ Traceback (most recent call last):
  File "p.py", line 60, in <module>
    border.i (i)
  File "prim.py", line 50, in i
    self.up(self,len(self.elem)-1)
TypeError: up() takes exactly 2 arguments (3 given)
$ 

iこのように呼び出すと、self.up(self)コンパイルprint nされて表示されます。

$ <__main__.X instance at 0x7f7a7ddf0128>
<__main__.X instance at 0x7f7a7ddf0128>
<__main__.X instance at 0x7f7a7ddf0128>
<__main__.X instance at 0x7f7a7ddf0128>
$ 
4

3 に答える 3

2

selfあなたはに渡す必要はありませんup()

def i(self, new):
    self.elem.append(new)
    self.up(len(self.elem)-1)

Pythonがこれを行います。を検索すると、バインドされself.upたメソッドが与えられます。これは、を呼び出すとPythonが自動的に追加することを意味します。selfup()

あなたは事実上、電話をかけていup(self, self, len(self.elem)-1)ました; 2つだけが期待された3つの要素。

于 2012-12-15T15:33:45.413 に答える
1

メソッドに自分自身を渡す必要はありません。それはPythonによって直接行われます

これが、クラスとメソッドを使用する理由の1つです。オブジェクトはクラス内にあり、その特定のインスタンスが使用されるため、オブジェクトを明示的に渡さないでください。

于 2012-12-15T15:33:48.023 に答える
1

self明示的に渡す必要はありません:

self.up(self, len(self.elem)-1)
        ^^^^^ this needs to be removed

この変更を行ってプログラムを実行すると、次のようになります。

0
1
2
3
于 2012-12-15T15:34:36.057 に答える