2017-01-27 6 views
-2

私はC++とC#のプログラマーです。私は学校のためにPythonに移行しています。私はオブジェクト指向の原則で作っているゲームのエラーに直面しています。 HERESにコード:オブジェクトの初期化とPythonでの参照への割り当て

class Entity(object): 
    def __init__(self, name, hp): 
    self.name = name 
    self.hp = hp 

    def attack(self, attack_name): 
    pass 

    def set_name(self, name): 
    self.name = name 

class Enemy(Entity): 
    def __init__(self, name, hp): 
    super(Enemy, self).__init__(name, hp) 
    self.attacks = {} # creates a DICTINARY of attacks 

    def add_attack(self, attack_name, attack_damage): 
    self.attacks[attack_name] = attack_damage 

    def attack(self, attack_name): 
    if self.attacks[attack_name] == None: 
     print("Attack not availible.") 

    print(self.name + " is attacking with attack " + attack_name + " with " + self.attacks[attack_name]) 
    return self.attacks[attack_name] 

    new_enemy = Enemy("Waddle Doo", 140) 

    new_enemy.add_attack("Shoot Beam", 55) 

    new_enemy.attack("Shoot Beam") 

は私が呼ばエンティティクラスから継承したクラスを作成しました。私は敵のオブジェクトを開始しようとしましたが、それは私にエラーを与えました:NameError:名前 '敵'は定義されていません。なぜこうなった?コンストラクタがPythonでどのように機能するか、何かをしなければなりませんか?あなたがこの一見小さい問題を助けることができるなら、私はあなたに非常に感謝します。

+5

コードのインデントが間違っています。現在の最後の3つのステートメントはクラスの一部です。 –

+1

ここにヒントがあります:* Pythonのすべてがオブジェクト*です。代入は常に*参照の名前をつける*です。 –

答えて

2

それはあなたのインデントです。

new_enemy = Enemy("Waddle Doo", 140) 

new_enemy.add_attack("Shoot Beam", 55) 

new_enemy.attack("Shoot Beam") 

上記はEnemyクラスのスコープ内で宣言しています。それらをクラスのレベルに戻します。Enemy(Entity):行

0

これはインデントエラーのようです。しかし実際にはまだ有効な構文なので、SyntaxErrorは発生しませんでした。あなたはまだクラス定義の中で、Enemyという名前を使用しています。 1つのレベル

インデント解除これらの行:

new_enemy = Enemy("Waddle Doo", 140) 

    new_enemy.add_attack("Shoot Beam", 55) 

    new_enemy.attack("Shoot Beam") 
関連する問題