2016-04-24 5 views
0

Pythonでクラス変数に関する質問があります。独立クラスのクラス変数へのアクセスPython2.7.1

RPG用の単純な攻撃クラスを作成しようとしています。私はこのクラスでWeaponクラスとCharacterクラスの変数にアクセスする必要がありますが、3つは互いに継承関係はありません。そして、私は、すべてのスレッドが継承されているため、オンラインでヘルプを見つけることができません。ここで

は、各クラスのコードサンプルは、次のとおりです。

class Character(pygame.sprite.Sprite): 
    def __init__(self, hp, image, speed, x, y): 
     super(Character, self).__init__() 
     self.image = image 
     self.rect = self.image.get_rect().move(x, y) #initial placement 
     self.hp = hp 

class Weapon(Item): #Parent class item is a sprite class 
    def __init__(self, name, value, image, x, y, dmg): 
     super(Weapon, self).__init__(name, value, image, x, y) 
     self.dmg = dmg 


class Attack(object): 
    def __init__(self, Weapon, Character): 
     self.Weapon = Weapon 
     self.Character = Character  
    self.Character.hp -= self.Weapon.dmg 
UPDATE #####インデントは私が私のプログラムを実行しようとすると、私は次のエラーを取得する
class Attack(object): 
    def __init__(self, Weapon, Character): 
     self.Weapon = Weapon 
     self.Character = Character  
     self.Character.hp -= self.Weapon.dmg 

を整流:

File "classes.py", line 136, in <module> 
    class Attack(object): 

    File "classes.py", line 141, in Attack 
    self.Character.hp -= self.Weapon.dmg 

NameError: name 'self' is not defined 

私のAttackクラスのCharacterクラスからhp変数にどのようにアクセスすることができますか?最終的には、AttackクラスのWeaponクラスのdmg変数にもアクセスする必要があります。

+0

FWIW、私は攻撃をクラスにすることに多くの点はないと思います。なぜ攻撃()機能がないのでしょうか? –

+0

私はちょうどこれについて疑問に思っていた...キャラクター、アイテム、インベントリなどのクラスの方が良いか...キャラクタークラスの攻撃メソッドはWeaponクラスの変数を使用し、別のキャラクターは実行可能で簡単使用する。私はそれを試してみる。 – Sorade

+0

インデントの間違いを削除するのは良い方法ではありません。あなたの質問を見ている人を考えてください。今は理解できません。 – cromod

答えて

0

字下げに問題があります(self.Character.hp -= self.Weapon.dmg)。このコードはうまくいくはずです:

class Attack(object): 
    def __init__(self, Weapon, Character): 
     self.Weapon = Weapon 
     self.Character = Character  
     self.Character.hp -= self.Weapon.dmg 
+0

こんにちは、返信いただきありがとうございます、私はスタックオーバーフローを使用して新しいです...それは単純なインデントのエラーだったので、この質問を削除することをお勧めしますか? – Sorade

+0

必要に応じて質問を削除することができます。しかし誰もそれを下降させないので、それは興味があることを意味します。 – cromod