2016-10-23 12 views
-3
class Player: 
    def __init__(self): 
     self.speed 
     self.hp 
def Berserker(self): 
    self.speed == 12 
    self.hp == 6 

print("Berserkers stats are: " + Berserker()) 

どうしたのですか?ご覧のように、私はPythonの新機能です。 エラーは次のとおりです。TypeError:Berserker()に1つの必須の位置指定引数 'self'があります。私のコードでどこが間違っていましたか?

+2

あなたの '__init__'はd o何か。あなたのクラスをインスタンス化しようとすると、 'AttributeError'もスローされます。基本的なPythonチュートリアルから始めて、次にOOPに進む必要があります。 –

+1

そして、あなたの 'Berserker'メソッドはあなたのクラスに正しく字下げされていないので、インスタンスメソッドのように扱われるのではなく、関数として扱われます。 – idjaw

+1

berserkerがサブクラスまたは人のインスタンスになることを意味しましたか?それはあなたが書いたものではないからです。 – jonrsharpe

答えて

1

あなたにはかなりのものがありませんが、お手伝いします!

__init__機能は何もしません。基礎統計をいくつかあげましょう。私はPlayerのデフォルト速度と健康状態がそれぞれ10と100になると言います。次にBerserkerサブクラスPlayerにします(これはあなたが行ったことだと思います)。最後に、私はPlayerにその値の文字列形式の出力を得る方法を与えるでしょう。

まず、新しいPlayerBerserkerため

class Player: 
    def __init__(self, speed=10, health=100): 
     self.speed = speed 
     self.health = health 

    def __str__(self): 
     return "A player with speed {} and health {}.".format(self.speed, self.health) 

そして今。私はそれを85のベース15の速さと健康を与えるでしょう(もちろん、具体的には、あなた次第です!)

class Berserker(Player): 
    def __init__(self): 
     super().__init__(speed=15, health=85) 

最後に、我々はこれらを作成し、値を印刷することができます。私はいくつかの異なるバージョンを作って、どのように動作するかを見ることができます。 (そして、これには通常のPythonインタプリタを使用します)。

>>> p1 = Player() 
>>> p2 = Player(7, 120) 
>>> b = Berserker() 
>>> print(p1) 
A player with speed 10 and health 100. 
>>> print(p2) 
A player with speed 7 and health 120. 
>>> print(b) 
A player with speed 15 and health 85. 

これは、開始するのに適していることを願っています。

1

あなたはやったがミスの束:

  • インデントのpythonで
  • Assignementが1であるクラス「=」ではないとの一部となるためにあなたのバーサーカー方法「==」(ほとんどのプログラミングのような実際には言語)
  • 速度と馬力の初期値を与えるか、コンストラクタに入れないでください。値を代入すると、Python変数が作成されます。
  • があなたのクラスのインスタンスを作成し、それを印刷できるようにする
  • は、あなたのバーサーカーの方法は、文字列を返すよう

あなたのコードの作業バージョンは次のようにする必要があります:今

class Player: 
    def __init__(self): 
     self.speed = 0 
     self.hp = 0 
    def Berserker(self): 
     self.speed = 12 
     self.hp = 6 
     return "speed {} hp {}".format(self.speed,self.hp) 
m = Player() 
print("Berserkers stats are: " + m.Berserker()) 

それは動作するバージョンですが、まだIMOがうまく設計されていませんが、これはより良いです:

class Player: 
    def __init__(self): 
     self.speed = 0 
     self.hp = 0 
    def Berserker(self): 
     self.speed = 12 
     self.hp = 6 
    def __str__(self): 
     return "speed {} hp {}".format(self.speed,self.hp) 
m = Player() 
m.Berserker() 
print(m) 
関連する問題