2016-07-17 5 views
0

Wenn ich eine Klasse, die Elemente für einen textbasierten RPG, wie so erzeugt - bedenken Sie dies eine vereinfachte Version des Codes verwende ich:Wie verwendet man die Klasse, die durch eine Funktion zurückgegeben wird?

from random import choice, randint 

class Weapon(object): 
    def __init__(self, name, value, damage): 
     self.name = name 
     self.value = value 
     self.damage = damage 


class CreateWeapon(object): 
    def __init__(self): 
     self.prefix = ['rusty', 'polished', 'blessed'] 
     self.weaponType = ['long sword', 'halberd', 'axe'] 

    def generate(self): 
     weaponName = choice(self.prefix) + ' ' + choice(self.weaponType) 
     print weaponName 

     if weaponName[0] == 'r': 
      weaponDamage = randint(5, 20) 

     else: 
      weaponDamage = randint(20, 40) 

     weaponValue = randint(1, weaponDamage * 3) 
     return Weapon(weaponName, weaponValue, weaponDamage) 

Meine Frage Wesen: Wie kann ich die manipulieren Waffenobjekt, das ich über die Methode generate() der CreateWeapon-Klasse erstelle? Zum Beispiel, wenn ich eine Spielerklasse mit einem Inventarattribut habe:

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

    def addWeaponDrop(self): 
     createweapon = CreateWeapon() 
     createweapon.generate() 
     print 'What do?' 
     """self.inventory['weapons'].append()""" 

player = Player() 

... und ich rufe die Spieler Methode addWeaponDrop() eine randomisierte Waffe zu schaffen, wie füge ich diese Waffe Objekt, das Inventar des Spielers? Danke für jede Hilfe.

+0

direkt Im Allgemeinen schlägt eine Klasse ein Verb für einen Namen zu geben, dass Sie die falschen Design Wahl machen. Wie unten vorgeschlagen, und im wahrscheinlichen Fall, dass Sie keine komplexe 'WeaponFactory' benötigen, könnten Sie die Logik als alternativen Konstruktor in eine Klassenmethode verschieben. – jonrsharpe

Antwort

3

generate() gibt eine Waffeninstanz zurück, die Sie einfach an Ihr Inventar anhängen können.

weapon = createweapon.generate() 
self.inventory['weapons'].append(weapon) 

Ich muss aber sagen, ich denke nicht, dass CreateWeapon eine Klasse sein sollte. Klassen sind für Dinge - dh Waffen selbst; generate sollte eine Klassenmethode auf Waffe sein.

0

Ihre generate-Funktion gibt eine Waffe zurück. Sie müssen es nur zuweisen (oder direkt speichern).

z.B.

generated_weapon = CreateWeapon.generate() 
self.inventory['weapons'].append(generated_weapon) 

oder es speichern

self.inventory['weapons'].append(CreateWeapon.generate()) 
Verwandte Themen