2010-12-24 3 views
0
import os 
import sys 

class Corrector: 

    def correctAll(dir): 
     print "ok" 

c = Corrector() 
c.correctAll(os.getcwd()) 

を渡していると言っています:1つの引数を渡すと、私がこのコードが印刷された2

TypeError: correctAll() takes exactly 1 argument (2 given)

が、私の知る限りos.getcwd()はここに何が間違って..単一の文字列を返しますか?

+0

私のpythonを知らないが、それはデフォルトで渡されるコールバックparamはあなたが渡しているのparamとともに、そこにある可能性がありますに? –

答えて

4

selfを引数として受け入れるか、staticmethodデコレータを使用する必要があります。あなたはこの方法は、それが上かと呼ばれることをインスタンスにアクセスできるようにしたい場合は

class Corrector: 

    def correctAll(self, dir): 
     print "ok" 

または

class Corrector: 

    @staticmethod 
    def correctAll(dir): 
     print "ok" 

2の区別があります。その場合は、最初のインスタンスを使用し、インスタンスはselfとして使用可能になります。それ以外の場合は、2番目の方法を使用できます。

Pythonメソッドは、最初の引数としてバインドされているオブジェクトを明示的に受け入れることによって機能します(selfは正式なものですが、実際には何でも構いません)。その引数は、呼び出しが発生したときに暗黙的に渡されます。

+0

言うまでもなく、 'staticmethod'は、クラス内にあるすべてのものを必要とする言語と同じように、Pythonでは必要ありません。 – delnan

1

あなたcorrectAllがselfパラメータが欠落しています。すべてのインスタンスメソッドは、その最初の引数としてselfを持っている必要があり、それは「オブジェクトそのもの」つまり を意味し、c.correctAll(x)Corrector.correctAll(c, x)

Pythonシェルの例

>>> class Test: 
... def doSomething(s, x): print x 
... 
>>> Test().doSomething(1) 
1 
>>> Test.doSomething(Test(), 1) 
1 
>>> Test() 
<__main__.Test instance at 0xb7793acc> 
>>> 
のようなものです

の作業コード:

import os 
import sys 

class Corrector: 

    def correctAll(self, dir): 
     print "ok" 

c = Corrector() 
c.correctAll(os.getcwd()) 

参照してください。またhttp://docs.python.org/tutorial/classes.html

+0

インスタンスメソッド。 – geoffspear

1

というインスタンス引数を明示的に受け入れる必要があります(他の言語は自動的にそれを提供します)。つまり、メソッドの定義はdef correctAll(self, dir)のようになります。

0

引数リストにselfも定義してはいけませんか?

 
class Corrector: 

    def correctAll(self, dir): 
     print "ok" 

たぶん私が間違っている...

+0

Woohoo私は間違っていませんでした! – Rudie

関連する問題