2017-03-25 6 views
-1

キャラクタークラスを作成する関数とメインコードがあるモジュールがあるプログラムのようなバトルを行っています。私はというエラーを取得した文字の一つの健康変更する機能をインポートする場合:別のモジュールから関数をインポートしています:AttributeError: 'module'オブジェクトに属性がありません

AttributeError: 'module' object has no attribute 

ここを機能である:

def changeHealth(self,health,defense,Oattack): 
    self.health = health - (Oattack - defense) - 15 
    return self.health 

と私はメインのコードモジュールに関数を呼び出します私はこれを行う:

import CharacterClass 
CharacterClass.changeHealth(self,health,defense,Oattack) 
+1

'self = Character()'これは削除する必要があります。これはPythonでは行いません。 – Julien

+1

あなたのアプローチには多くの問題があります。あるクラス定義内で関数を再定義し、使用していない変数を作成します( 'self = Character()'は決してアクセスしないクラス変数を作成します)。メインキャラクターと相手をプログラム内のキャラクターとして作成することができます(クラス内ではありません)。次に、主人公と相手の属性にアクセスし、それぞれの健康状態を適切に変更する「バトル」機能を持っています。 – Craig

+0

@Craig、どうやって相手を作りますか?私のコードは、self = Character() –

答えて

0

は、ここでは、あなたのプログラム内の任意の文字を使用することができるCharacterのためのクラスを作成することができる方法の例です。各クラスは、オブジェクトの一意の型を表す必要があります。この場合、「文字」です。各文字はそのクラスのインスタンスでなければなりません。関数またはクラスメソッドのいずれかを使って文字インスタンス間のやりとりを処理します。

class Character(object): 
    def __init__(self, name, attack, defense, health): 
     self.name = name 
     self.attack = attack 
     self.defense = defense 
     self.health = health 

    def injure(self, damage): 
     self.health = self.health - damage 

    def __str__(self): 
     return "Character: {}, A:{}, D:{}, H:{}".format(self.name, self.attack, self.defense, self.health) 

    def check(self): 
     print("this works") 

    def doAttack(self, other=None): 
     dmg = self.attack - other.defense 
     if dmg > 0: 
      other.injure(dmg) 
      print("{} caused {} damage to {}".format(self.name, dmg, other.name)) 
     else: 
      print("{} did not injure {}".format(self.name, other.name)) 


hero = Character('Hero', 8, 10, 20) 
opponent = Character('Monster', 4, 5, 10) 


opponent.doAttack(hero) 
print(hero) 
print(opponent) 
print() 

hero.doAttack(opponent) 
print(hero) 
print(opponent) 
print() 

は、このコードを実行すると、生成します。

Monster did not injure Hero 
Character: Hero, A:8, D:10, H:20 
Character: Monster, A:4, D:5, H:10 

Hero caused 3 damage to Monster 
Character: Hero, A:8, D:10, H:20 
Character: Monster, A:4, D:5, H:7 

は、これはかなり基本的な例です。 Object Oriented Programming in Python(またはそれに類するテキスト)を読んで、オブジェクト指向コードの構造の背後にある概念を学ぶことができます。

+0

申し訳ありませんが、@Craig Stack Overflowは別の質問を追加することはできませんでした。明らかに、私は過去2日間にたくさんの質問をしましたが、私は1つしか聞いていませんでした。あなたの答えは意味をなさないかもしれません。あなたが望むならそれを削除してもどうぞ –

関連する問題