2016-07-10 16 views
2

Ich bin dabei, Elemente zu einem textbasierten RPG hinzuzufügen, das ich mache. Meine Klassen wie folgt aussehen:Wissen, wann eine Instanz der Klasse erstellt werden muss, anstatt eine Unterklasse zu erstellen?

class Item(object): 
    def __init__(self, name, value, description): 
     self.name = name 
     self.value = value 
     self.description = description 

class Weapon(Item): 
    def __init__(self, name, value, damage, description): 
     self.damage = damage 
     super(Weapon, self).__init__(name, value, description) 

Inventar Mein Spielers ist ein Wörterbuch mit den Tasten, die verschiedene in-Game-Item Gruppen:

class Player(object): 
    def __init__(self, inventory, ...): 
     self.inventory = {'weapons': []} 
hero = Player() 

Die Frage ist, wenn Tutorials sehen, haben sie mir eine Klasse machen ein Element als so:

class Dagger(Weapon): 
    def __init__(...) 
     ... 

und fügen sie mein Inventar hero.inventory['weapons'].append(Dagger())

Meine Frage ist: gibt es einen Vorteil beim Erstellen neuer Unterklassen wie Dagger() über nur Erstellen von Instanzen der Weapon() Klasse, da ich keine zusätzlichen Attribute zu einzelnen Waffen hinzufügen?

Danke für jede Hilfe, ich hoffe, dieser Beitrag ist klar.

Antwort

0

In Bezug auf den Codestil ist das Erstellen von Unterklassen besser, da es eine dynamischere Codebasis ermöglicht, sodass Sie sie weiter erweitern können. Darüber hinaus macht es Ihren Code lesbarer und Sie können auch Hilfemeldungen/Infotexte einfacher hinzufügen. Wenn Sie jedoch, wie Sie sagten, nur den Schaden speichern müssen, hat das Erstellen von Unterklassen keinen großen Vorteil. Denken Sie daran, dass Sie auch den Namen der Waffe speichern möchten. Ich würde Ihnen raten, Subklassen zu erstellen, weil es eine Weiterentwicklung ermöglicht und besser für Ihren Code-Stil ist.

0

Es hängt alles davon ab, ob Sie der neu erstellten Unterklasse andere Variablen hinzufügen möchten. Die Gefahr wird die Waffenklasse mit dem Namen, Wert, Schaden und Beschreibung übernehmen. Ich hätte meine verschiedenen Waffen Unterklassen wie Langschwert, Schwert, Dolch, Stab, etc. Das wären für die verschiedenen Waffenarten die hätten unterschiedliche Angriffsarten. Dolch kann nur Stich/Stich haben, während Langschwert Slash, Jab und vielleicht eine Art Power-Slash hätte.

3

Verwenden Sie die Unterklasse, wenn eine natürliche Is-a-Beziehung besteht.

Sie Vererbung nicht nur verwenden, um die Wiederverwendung von Code zu erhalten

Erbe nicht nur Polymorphismus

In Ihrem Beispiel Fall Dagger ist eine Waffe zu bekommen Verwenden Sie, so dass es zu durchaus Sinn macht Verwenden Sie Unterklasse.

Sie können gute Lektüre, wenn man für die Vererbung vs Zusammensetzung suchen, oder ist-a vs hat-eine

hoffe, das hilft

Verwandte Themen