Я потратил час или два вместе, пытаясь разобраться в этой проблеме, но я не получил никаких результатов. В моей программе, когда защищающееся животное «убито», оно должно быть удалено из его реестра, но, что бы я ни делал, я не могу этого добиться. В этом случае, если бы я должен был инициировать охотника и буйвола, то атаковать () буйвола с охотником, буйвол должен быть убит и удален из реестра его классов, но я не могу python выбрать этот конкретный c буйвол из реестра.
Любая помощь приветствуется.
class IterRegistry(type):
def __iter__(cls):
return iter(cls._registry)
class Buffalo(object):
__metaclass__ = IterRegistry
_registry = []
hp = 1
price = 150
attacks = 0
regeneration = 2
def __init__(self, name):
self._registry.append(self)
self.name = name
def createBuffalo():
for i in range(len(Buffalo._registry),len(Buffalo._registry)+1):
varname = ("b" + str(i))
globals()[varname] = Buffalo("b" + str(i))
class Wolf:
__metaclass__ = IterRegistry
_registry = []
hp = 1
price = 0
attacks = 2
regeneration = 1.5
def __init__(self, name):
self._registry.append(self)
self.name = name
def createWolf():
for i in range(len(Wolf._registry),len(Wolf._registry)+1):
varname = ("w" + str(i))
globals()[varname] = Wolf("w" + str(i))
class Hunter:
__metaclass__ = IterRegistry
_registry = []
hp = 2
price = 0
attacks = 1
regeneration = 0
balance = 0
def __init__(self, name):
self._registry.append(self)
self.name = name
def createHunter():
for i in range(len(Hunter._registry),len(Hunter._registry)+1):
varname = ("h" + str(i))
globals()[varname] = Hunter("h" + str(i))
def attack(attacker, target):
if attacker.attacks >= 1:
target.hp -= 1
if target.hp == 0:
if type(attacker) == Hunter:
attacker.balance += 150
print(target)
if type(target) == Wolf:
del Wolf._registry[[n for n in Wolf._registry if n == target]]
if type(target) == Hunter:
del Hunter._registry[[n for n in Hunter._registry if n == target]]
if type(target) == Buffalo:
del Buffalo._registry[[n for n in Hunter._registry if n == target]]
Еще одно замечание, причина в том, что у меня двойные скобки, потому что это был неправильный синтаксис с одинарными скобками, но синтаксис был хорош с двойными .
Если вам нужно больше кода, задайте его в комментариях ниже (я не включил все это, но этого должно быть достаточно).