簡體   English   中英

Python,如何在大類下創建特定的類

[英]Python, how to create specific classes under a big class

這里是新的python學習器。 我正在嘗試在python中設計一個文本rpg,我希望在游戲的特定部分增加所有敵方生物的統計數據。 這是我為那些敵人准備的代碼:

class Executioner:
    def __init__(self,name):
    self.name = name

    self.potions = 0
    self.maxhp = 800 
    self.hp = self.maxhp 
    self.attack = 25 
    self.ability = 0 
    self.defense = 0 
    self.goldgain = 333 
    self.expgain = 250 
ExecutionerIG = Executioner("Executioner the slayer")

class Goblin:
    def __init__(self,name):
    self.name = name

    self.potions = 0
    self.maxhp = 80
    self.hp = self.maxhp
    self.attack = 25
    self.ability = 0
    self.defense = 0
    self.goldgain = 5.5
    self.expgain = 22
GoblinIG = Goblin("Goblin")

class Zombie:
    def __init__(self,name):
    self.name = name

    self.potions = 0
    self.maxhp = 180
    self.hp = self.maxhp
    self.attack = 19    
    self.ability = 0
    self.defense = 0
    self.goldgain = 7
    self.expgain = 28
ZombieIG = Zombie("Zombie")

我認為一種快速實現此目的的方法可以是將這些類定義為一個稱為敵人的大類,然后再調用敵人.hp,敵人。攻擊等來增加。

但是我也不知道該怎么做,因為我現在很疲倦。

我們將非常感謝您提出有關如何通過指定大型班級下的小班級來增加班級統計信息或快速增加班級統計信息的建議(僅輸入並增加班級統計信息是行不通的,因為我會遇到很多敵人)。

不,那不是一個好方法。 嵌套類在Python中很少有用,並且在這里肯定不會有用。

最好將它們放入可以循環瀏覽的列表中:

enemies = []
...
ExecutionerIG = Executioner("Executioner the slayer")
enemies.append(ExecutionerIG)

等等。 然后,在必要時進行迭代:

for enemy in enemies:
    enemy.hp += 1

順便說一句,我會質疑您是否真的需要Executioner,Zombie和Goblin的單獨類? 它們的每個統計信息的編號都不同,因此對於一般的敵人類,也許您應該只在__init__方法中接受這些值。

丹尼爾·羅斯曼(Daniel Roseman)所說的是真的,在編寫代碼時,您應該盡量不要重復自己。 如果兩個對象非常相似並且僅在某些特定值上有所不同,那么實際上它們是同一對象。 所有自行車都是自行車,但是有些自行車具有不同的車輪尺寸。 在這里,您的對象都是一個敵人對象,可以照此實現。

但是,我將回答您的問題,因為了解子類非常重要。 要對一個類進行子類化,可以在定義中傳入父類,如下所示:

class Zombie(Enemy):

然后,如果像這樣定義了Enemy類,例如:

class Enemy: def attack(): <your code>

您可以對僵屍對象發起攻擊。 它將在Zombie類中尋找Attack(),如果找不到它,它將在父類中尋找它。 如果在父類中找不到它,它將在該父類中尋找它,依此類推,一直向上移動到頂層對象。 如果根本找不到,則會引發異常。 例如,如果您在Zombie類中定義了Attack(),那么它將覆蓋Enemy類中的Attack()。

鑒於所有這些,丹尼爾·羅斯曼是對的。 您應該將所有這些歸為一類,並在構建時傳遞hp等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM