Python creando múltiples instancias para un solo objeto / clase

Estoy usando Python. He leído un poco sobre esto y parece que no puedo entenderlo. Lo que quiero hacer es tener una clase llamada Pociones con varios objetos de pociones. Por ahora hay una poción, una simple HealthPotion. Quiero que las pociones sean apilables en inventarios y en existencias. Así que necesito una instancia de la cantidad de pociones para un inventario y una instancia para cada stock de la tienda que lleve pociones. La cantidad de pociones sería dinámica, para comprar / vender y saquear pociones. Si alguien pudiera proporcionar una explicación básica o ejemplos, eso sería genial.

Aquí hay un fragmento de lo que tengo:

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)

Idealmente, la cantidad predeterminada se establecería en 0 y podría declarar cuánto comenzaría una determinada tienda en sus existencias. El inventario y el stock de la tienda se configuran como una matriz a la que se agregan y eliminan los artículos. Creo que tengo la lógica de cómo funcionaría esto, solo estoy teniendo problemas para establecer las cantidades.

EDITAR Esto es parte de lo que tengo en un método de compra para ver qué sucedería sin usar instancias. Es bastante feo y discerní que tu inventario no funcionará. y ser el artículo seleccionado de la lista de artículos que se muestra en una "tienda".

            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)

He visto ejemplos como este:

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

Me pregunto si no solo creo un segundo objeto HealthPotion, sino que eso no me parece correcto. Este ejemplo me lleva a pensar lo contrario. Quizás no entiendo las instancias.

"Esto crearía el primer objeto de la clase Empleado"

emp1 = Employee("Zara", 2000)

"Esto crearía el segundo objeto de la clase Empleado"

emp2 = Employee("Manni", 5000)

¡Gracias

Respuestas a la pregunta(4)

Su respuesta a la pregunta