2017-06-19 14 views
-3

文字列を逆に戻すことができる単純な関数を作成しようとしています。しかし、関数を呼び出すと、エラー文字列パラメータを持つ関数のTypeError

TypeError: reverseString() takes 1 positional argument but 2 were given 

が出ます。私はJavaについてよく知っていて、問題が何か、そして文字列パラメータを渡すことがPythonで同じであるかどうか疑問に思っていました。

Class myString() 

     def reverseString(string): 
       return string[:,:,-1] 

    p = myString() 
    p.reversedString('Eric') 
+5

は、クラス定義の中で、実際に方法* *この機能ですか?あなたはこのメソッドをあるクラスのインスタンスで呼びますか?あなたは*少なくとも少なくとも*で呼び出しコードを提供する必要があります。 –

+3

ようこそStackOverflowへ。ヘルプドキュメントの投稿ガイドラインを読み、それに従ってください。 [最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)がここに適用されます。 MCVEコードを投稿して問題を正確に記述するまでは、効果的にお手伝いすることはできません。 投稿したコードをテキストファイルに貼り付け、説明した問題を再現できるはずです。 – Prune

+3

[PythonはJavaではありません](http://dirtsimple.org/2004/12/python-is-not-java.html)、クラス内のすべてをラップする必要はありません。また、大文字と小文字が区別されるため、投稿した内容は実際にはまったく機能しません。しかし、それをクラスのメソッドとして(より簡単な関数ではなく)持たせたい場合は、 'self'引数が必要です。私はチュートリアルを実行することをお勧めします:https://sopython.com/wiki/What_tutorial_should_I_read%3F – jonrsharpe

答えて

4

Pythonには、メソッドが呼び出されるインスタンスを渡すメソッドのための特別な最初のパラメータが必要です。 でも有効ですが、有効な変数名はかなりありますが、それはPythonの規約でselfを使用することで、コードを他の人が読むのが容易になります。インスタンス変数にアクセスするには

class myString:  
    def reverseString(self, string): 
     return string[::-1] 

p = myString() 
print(p.reverseString('Eric')) 

、あなたはself.varを使用する - あなただけのJavaのようvarを行うことはできません。

@jonrshapeはコメントで指摘したようにまた、あなたはクラス内の関数をラップする必要はありません。

def reverseString(string): 
    return string[::-1] 

print(reverseString('Eric')) 
+0

いいえ、これは間違いなく '@ classmethod'の目的ではありません。それは悪い悪い悪いアドバイスです。特にJavaからPythonに来る人にとっては。 –

+2

@ juanpa.arrivillaga有効なポイント。更新しました。 – anonymoose

+1

もう一つ、 'this'と' self'は全く異なった働きをします。 'self'はPythonのキーワードではありません。実際には、関数定義の最初のパラメータであれば*任意の名前を使用できます。また、ほとんどの場合、インスタンス変数はクラス定義で宣言されているので、Javaで 'this'を省略することができます。 Pythonには変数宣言はありません。インスタンス属性には 'self.whatever'を明示的に使用する必要があります。 Pythonのインスタンス属性はどのメソッドでも作成できます。 –

関連する問題