假设我们有一堆怪物职业,其中包括一个地精和一个小鬼:
class Goblin(object):
def __init__(self):
self.Name = "Goblin"
self.HP = random.randint(15,20)
self.Damage = random.randint(5,10)
class Imp(object):
def __init__(self):
self.Name = "Imp"
self.HP = random.randint(5,10)
self.Damage = random.randint(2,5)
我们有一个创建怪物的函数,其中“Type”是被创建的怪物的类型:
def GenerateCharacter(Type, Number):
i=0
while i < (Number):
TempChar = #what do I put here so it knows to create Goblins if I do GenerateCharacter(Goblin, 10)
Character_List.append(TempChar)
i = i + 1
如果函数的类型参数是“Goblin”(类的名称),如何使放入TempChar的类成为Goblin?所以如果我生成一个字符(X,10),它就生成TempChar=X()??你知道吗
如果我做GenerateCharacter(Goblin,10),我希望它生成10个Goblin类实例并附加到Character\u列表,但是如果我做GenerateCharacter(Imp,10),我希望它做10个Imp。你知道吗
假设要以字符串形式传入类名,请尝试以下操作:
也许有更好的方法可以做到这一点,将Goblin和Imp类型封装在一个Monster类中,这可能会使您的代码更易于维护。有关更多信息和示例,请参见此处:http://python-3-patterns-idioms-test.readthedocs.io/en/latest/Factory.html
编辑:这里更接近你想要的:
如果你检查这段代码,你会看到怪物列表将包含3个对象,每个类一个。你知道吗
如果将其作为字符串传递,则可以使用
globals()
方法,该方法返回全局命名空间中所有变量的字典另外,在循环外创建字符列表并使用for循环,因为它更干净,而且您可以避免自己增加循环的计数器。你知道吗
相关问题 更多 >
编程相关推荐