Я использую Python. Я читал немного об этом и, похоже, не могу обдумать его. То, что я хочу сделать, - это класс, называемый Зельями с различными предметами зелья. На данный момент есть одно зелье, простое HealthPotion. Я хочу, чтобы зелья были штабелированы в запасах и магазинах. Поэтому мне нужен экземпляр суммы зелья для инвентаря и экземпляра для каждого магазина, в котором есть зелья. Количество зелья было бы динамичным, для покупки/продажи и разграбления зелий. Если кто-то может дать основное объяснение или примеры, которые были бы замечательными.Python, создающий несколько экземпляров для одного объекта/класса
Вот отрывок из того, что у меня есть:
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)
В идеале количество по умолчанию будет установлено в 0, и я был бы в состоянии объявить, сколько определенный магазин хотел бы начать с их наличием. Запасы и инвентарь устанавливаются в виде массива, который добавляется и удаляется в/из. Я думаю, что у меня есть логика для того, как это будет работать, у меня просто возникают проблемы с созданием сумм.
EDIT: Это часть того, что у меня есть в методе покупки, чтобы узнать, что произойдет без использования экземпляров. Это довольно уродливо, и я заметил, что you.inventory.y.amt не будет работать. y - выбранный элемент из списка элементов, отображаемых в «магазине».
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)
Я посмотрел на примерах, как это:
class foo:
a = 1
i = foo()
foo.a => 1
i.a => 1
i.a = "inst"
foo.a => 1
i.a => "inst"
мне интересно, если я не просто создать второй объект HealthPotion, но это не звучит для меня. Этот пример заставляет меня думать иначе. Может быть, я просто не понимаю, что происходит.
"Это позволило бы создать первый объект класса Employee"
emp1 = Employee("Zara", 2000)
"Это позволило бы создать второй объект класса Employee"
emp2 = Employee("Manni", 5000)
Спасибо!
Итак, что конкретно представляет собой ваша проблема? Что вы пытались решить вашу проблему? – Marcin
Не решение вашей проблемы, но вам не нужно будет устанавливать переменные-члены в инициализации зелья, если вы вызываете ваш суперкласс init. – Marcin
Возможно, вы захотите использовать аргументы named keyword вместо комментария при конструировании. ('health_potion = Potion (name =" Health Potion ", desc =" Restores ... ", ...') – Daenyth