2016-04-19 22 views
0

私はpythonでsuper()とクラスの継承について教えようとしていません。次のコードを与えられれば、誰かが私が何が起こると期待するのかを教えてもらえますか?Pythonクラスの継承とsuper()の動作?

import random 
enemy_list = [] 

class Entity(object): 

    def __init__(self, name=''): 
     self.name = name 
     self.health = 1 
     self.attack_power = .05 

class Enemy(Entity): 

    def __init__(self, name, target): 
     super(Enemy, self).__init__(name) 
     self.lvl = random.randint(target.lvl - 2, target.lvl + 2) 
     self.health *= self.lvl * target.health 
     self.attack_power *= self.lvl 

def createEnemy(enemy): 
    enemy_list.append(Enemy(enemy, player)) 
    return enemy_list 

enemy_amount = random.randint(1, 5) 
while enemy_amount > 0: 
    createEnemy(Enemy("goblin", player)) 
    enemy_amount -= 1 

for i in enemy_list: 
    print "(", i.lvl, i.name, i.attack_power, i.health, ")" 

なぜこのコードの出力は次のとおりです。代わりに、期待の

(2 <__main__.Enemy object at 0x7faa040b3050> 0.1 80) 
(5 <__main__.Enemy object at 0x7faa040b30d0> 0.25 200) 
(3 <__main__.Enemy object at 0x7faa040b3150> 0.15 120) 
(5 <__main__.Enemy object at 0x7faa040b31d0> 0.25 200) 

(2 goblin 0.1 80) 
(5 goblin 0.25 200) 
(3 goblin 0.15 120) 
(5 goblin 0.25 200) 
+0

「プレーヤー」とは何ですか、それは「敵」のインスタンスですか? – edhurtig

+0

@edhurtig playerはエンティティのもう一つのインスタンスです。Enemyクラスに表示されているものとかなり似ていますが、数学(ターゲットデータがない対象はありません) – user6195779

+0

私が話していることはほとんど考えていないでしょう。 ... 私はここでそれを使用して敵のレベルを決定し、そのレベルに応じてその属性を調整します。 – user6195779

答えて

0

あなたが名前

def createEnemy(enemy): 
    enemy_list.append(Enemy(enemy, player)) 
    return enemy_list 


createEnemy(Enemy("goblin", player)) 

ためにEnemyオブジェクトを渡していますに電話する、Enemyを渡す。 createEnemyの中に、その敵オブジェクトを最初の引数として渡して別のEnemyを作成します(最初の引数は名前でなければなりません)。

+0

ありがとう、ありがとう。あなたの答えは、それが他のものと非常に似ていても、私に明瞭さの瞬間を与えたものでした。 あなたのコメントのために、私が望んでいなかったことがわかりましたcreateEnemy(Enemy("goblin", player))私はcreateEnemy("goblin")を望んでいました。私はそれをもっとよく理解しているとは言えませんが、それの「流れ」がより意味をなさないようになっています。 – user6195779

1

enemyが、このライン上で渡されている:あなたはnameの文字列を渡しますが、敵オブジェクトいない

def createEnemy(enemy_name): 
    enemy_list.append(Enemy(enemy_name, player)) 
    return enemy_list 

while enemy_amount > 0: 
    createEnemy("goblin", player) 
    enemy_amount -= 1 
+0

ありがとうございました。あなたのコメントと他の人のコメントのために、私は望んでいなかったことを理解することができましたcreateEnemy(Enemy("goblin", player))私はcreateEnemy("goblin")を望んでいました。私はそれをもっとよく理解しているとは言えませんが、それの「流れ」がより意味をなさないようになっています。 – user6195779

1

enemy_list.append(Enemy(enemy, player)) 

おそらく、あなたのような何かをしたいです。実行順序は次のとおりです。

createEnemy(Enemy("goblin", player)) 

その後、

enemy_list.append(Enemy(enemy, player)) 

この時点name

super(Enemy, self).__init__(name) 

は、文字列が、敵オブジェクトではありません。

+0

ありがとうございました。あなたのコメントと他の人のコメントのために、私は望んでいなかったことを理解することができましたcreateEnemy(Enemy("goblin", player))私はcreateEnemy("goblin")を望んでいました。私はそれをもっとよく理解しているとは言えませんが、それの「流れ」がより意味をなさないようになっています。 – user6195779

関連する問題