Python de créer plusieurs instances d'un même objet/classe

Je suis en utilisant Python. J'ai lu un peu à ce sujet et ne semble pas possible d'envelopper mon esprit autour de lui. Ce que je veux faire est d'avoir une classe appelée Potions diverses potion objets. Pour l'instant il y a une potion, un simple HealthPotion. Je veux des potions pour être empilable dans les stocks et une boutique de stocks. J'ai donc besoin d'une instance de la potion montant d'un inventaire et d'une instance pour chaque magasin de stock qui transporte des potions. La potion montant serait dynamique, pour l'achat/vente et le pillage des potions. Si quelqu'un pouvait fournir une explication de base ou des exemples, ce serait super.

Voici un extrait de ce que j'ai:

class Potion(Item):
    def __init__(self, name, desc, val, amt, type, effect, bound):
        Item.__init__(self, name, desc, val, amt, type, effect, bound)

        self.name = name
        self.desc = desc
        self.val = val
        self.amt = amt
        self.type = 0 #Restorative
        self.effect = effect

   def use(self, you):
    #Use health potion
        you.hp_current += self.effect
        you.displayStats()

#Format: Name, Description, Value, Amount, Type, Effect, Bound
HealthPotion = Potion('Health Potion', 'Restores 10 hit points when consumed', 10, 0, 
0, 10, 0)

Idéalement, la quantité par défaut devrait être fixé à 0 et je serais en mesure de déclarer à quel point une certaine boutique serait de commencer avec dans leur stock. L'inventaire et la boutique stock est défini comme un tableau que les éléments sont ajoutés et retirés. Je pense que j'ai la logique bas pour savoir comment ça allait fonctionner, je viens vais avoir des ennuis avec l'instanciation des montants.

EDIT: Cela fait partie de ce que j'ai dans une méthode acheter pour voir ce qui allait se passer sans l'aide des instances. C'est assez laid et j'ai discerné que vous.de l'inventaire.y.l'amt ne fonctionnera pas. y étant l'élément sélectionné de la liste des éléments qui s'affichent dans une "boutique."

            x = selection - 1 #Item menu starts at 1. But arrays start at 0. So it takes user input and subtracts 1 to match the array.
            y = self.stock[x]

            if y.val <= you.coin:
                if y.amt == 0:
                    you.inventory.append(y)
                    you.inventory.y.amt += 1
                else:
                    you.inventory.y.amt += 1;

                you.coin -= y.val
                self.funds += y.val

                if self.stock.y.amt > 1:
                    self.stock.y.amt -= 1
                else:
                    self.stock.y.amt -= 1
                    self.stock.pop(x)

J'ai regardé les exemples de ce genre:

class foo: 
a = 1 
i = foo() 
foo.a => 1 
i.a => 1 
i.a = "inst" 
foo.a => 1
i.a => "inst"

Je me demande si je ne suis pas juste de créer un deuxième HealthPotion objet, mais qui n'est pas bonne pour moi. Cet exemple m'amène à penser le contraire. Peut-être que je ne comprends juste pas l'instanciation.

"Cela permettrait de créer de l'objet premier de la classe Employé"

emp1 = Employee("Zara", 2000)

"Cela permettrait de créer second objet de la classe Employee"

emp2 = Employee("Manni", 5000)

Merci!

Alors, quel est exactement votre problème? Qu'avez-vous essayé de résoudre votre problème?
Pas une solution à votre problème, mais il ne devrait pas être nécessaire pour vous de définir vos variables de membre dans la potion init si vous appelez votre super-classe init.
Vous voudrez probablement utiliser nommé mot-clé arguments au lieu d'un commentaire lors de la construction. (health_potion = Potion(name="Health Potion", desc="Restores...", ...)
Ne demandez pas des exemples. Montrez-nous votre tentative de réalisation de la tâche, et de donner une description correcte de la tâche. Expliquer pourquoi votre tentative ne permet pas d'atteindre le résultat prévu. Mettre tout cela dans votre question, et non dans les commentaires.
Aussi, si l'une des réponses représente une résolution complète de votre problème, vous devez accepter le meilleur. Sinon, faites une mise à jour de votre question pour clarifier davantage.

OriginalL'auteur TechnoCat | 2012-02-27