2016-03-24 12 views
-1

コードウォークで簡単なクラスを作成する際に問題が発生しています。私はselfパラメータと一緒に二つのパラメータでinit関数を供給実現init関数のPython 3.5エラーで十分な引数がありません

Traceback: in TypeError: __init__() takes exactly 3 arguments (2 given)

:私は、次のエラーが発生します。クラスからオブジェクトを作成するときに、2つのパラメータに2つの文字列を指定しています。他に何が間違っているのか分かりません。それはコードワースのブラウザですか?私は助けていただきありがとうございます。以下を参照してください:

class Person: 

    def __init__(self, name, other_name): 
     self.name = name 
     self.other_name = other_name 

    def greet(self): 
     return "Hi {0}, my name is {1}".format(self.other_name, self.name) 

xy = Person("Raiden", "Donald") 
xy.greet() 

私はこのテーマに関する他の質問をチェックして、常に問題は、クラスを呼び出す人は必要なパラメータでそれを供給していないということであるようです。私はそれをやっている。私は助けていただきありがとうございます。

EDIT ************

それは私が私の通常のPythonのIDLEに上記のコードを生成できることは注目に値します。コードワードウィンドウにはまったく同じコードがあります。 Hersは元のコードワードの質問です。 greet関数が期待値を返すように、このコードを修正してください。

class Person: 
    def __init__(self, name): 
    self.name = name 

    def greet(self, other_name): 
    return "Hi {0}, my name is {1}".format(other_name, name) 
+1

Python 3.5.1で再現できません – vaultah

+1

どのコードワーに問題がありますか。あなたはリンクを投稿できますか?また、Codewarsエディタウィンドウにあるすべてのコードを確認してください。 – idjaw

+0

元のコードワードの開始コードとその質問を含めるようにオリジナルのコメントを編集しました。 IDLEで投稿した元のコードをエラーなしに再現できることにも注意してください。 – raidboss

答えて

1

コードワードの問題は、修正が必要なコードを提供しています。あなたがそれを提出すると、質問作成者によって定義された一連のunittestに対して実行されます。ここでは、元のコードは次のとおりです。

class Person: 
    def __init__(self, name): 
    self.name = name 

    def greet(self, other_name): 
    return "Hi {0}, my name is {1}".format(other_name, name) 

このコードを提出する際、あなたが取得しているエラーは次のとおりです。

Traceback: 
    in 
    in greet 
NameError: global name 'name' is not defined 

ので、そのエラーメッセージを表示して、コードを解析することにより、あなたはgreet方法とに気づくでしょう実際には定義されていない変数nameを実際に使用しようとしています。

これは実際に修正する必要があるエラーです。 に余分な変数を追加しようとしていました。だから、あなたのコードに対して実行されているユニットテストでは、に1つの値しか渡されないと予想されていました。

greetメソッドのnameself.nameに変更するだけで、インスタンス属性が使用されるようになりました。あなたの最終的なコードはかなりです:

class Person: 
    def __init__(self, name): 
    self.name = name 

    def greet(self, other_name): 
    return "Hi {0}, my name is {1}".format(other_name, self.name) 
+0

うわー、ありがとう。私はそれを捕まえたことはないだろう。私はもっ​​と多くのコードを追加し、キーボードを叩くことを熟考して、問題を複雑化しようとし続けました。徹底的で詳細な情報をありがとうございました。非常に感謝しています:) – raidboss

+0

@raidbossあなたは大歓迎です。コードワーズを楽しんでください。それは素晴らしい。これが助けになったら、あなたがアップヴォートして答えを受け入れるようにしてください。これは、次の個人が同様の助けを求めて、これが役立ったことを知るのに役立ちます。乾杯と幸運! – idjaw

+0

私の悪い、彼らは両方とも技術的に質問に答えたので、私は両方をチェックした。私は1つの小切手しか適用できないことを知らなかった。それは偉大で徹底的な説明だったので、あなたの答えに印を付けました。他の人がこれで恩恵を受けることを望みます。再度、感謝します! – raidboss

0

Codewarsは、あなたが与えられたコードを修正することに成功したかどうかを確認するために、あなたのコードにテストケースを実行しています。これらのテストケースはすべて、Personコンストラクタが1つの位置引数を取ると仮定しています。 Person.__init__のシグネチャを2つの位置引数を必要とするように変更したので、各テストケースは報告されたTypeErrorを投げます。

提供されたコードを修正するには、メソッドにnameという名前のローカル変数があるかどうかを検討してください。

+0

ありがとうございました:) – raidboss

関連する問題