在函数中创建类对象(python)

2024-09-28 17:30:14 发布

您现在位置:Python中文网/ 问答频道 /正文

目前我正在探索Pygame的可能性,并创建了一个简单的游戏,现在正试图整理它。我试图通过使用在函数中创建的类来定义新对象。你知道吗

这就是我所尝试的:

def CreateEnemy():
    enemy1 = Enemies()
    enemy2 = Enemies()
    enemy3 = Enemies()
    enemy1.getInstructions()
    enemy2.getInstructions()
    enemy3.getInstructions()

但是,当我尝试使用对象enemy1时,它说它没有定义。据我所知,对象可能只是函数中的局部对象。这是否意味着我必须以某种方式使用返回函数?你知道吗


Tags: 对象函数游戏定义def可能性pygame整理
3条回答
class Ins_Normal():
  def getInstructions(self, *args):
    return "GetInstructions_Normal"

class Ins_Agressive():
  def getInstructions(self, *args):
    return "GetInstructions_Agressive"


class Enemies(object):
  def __init__(self, behaivor = 'Ins_Normal', mode = True, *args):
    self.behaivor = behaivor
    self.mode = mode

  def getInstructions(self, *args):
    #create instance based on behaivor
    try:
        ins = globals()[self.behaivor]() # same like ins = Ins_Agressive()
    except KeyError as e:
        raise NotImplementedError(e)
    # return getInstructions() init value behaivor
    return ins.getInstructions()

  def xyz(self, *args):
    # if True return worldspace position (eg)
    if self.mode:
      return "xyz"
    return 'com_xyz'

def CreateEnemy(enemy = 0, behaivor = 'Ins_Normal', mode =True):
    # wrapper function to collect Enemies 
    # create dict, so no hardcoded variabels, scalable....
    data = dict((_id, Enemies(behaivor, mode)) for _id in range(enemy))
    return data

# create groups of enemies
enemies_com_normal = CreateEnemy(3, 'Ins_Normal') #com
enemies_user_normal = CreateEnemy(3, 'Ins_Normal', True) #interactive
enemies_com_agressive = CreateEnemy(5, 'Ins_Agressive', True) #interactive

print enemies_com_normal
# we get dict of Enemy instances with id(int) as key
#>>> {0: <Enemies object at 0x7f2d8cfe5b10>, 1: <Enemies object at 0x7f2d8cfe5b50>, 2: <Enemies object at 0x7f2d8cfe5b90>}

#lets print some infos of the agents
print enemies_com_normal[0].xyz()
#>>>xyz
print enemies_com_normal[0].getInstructions()
#>>>GetInstructions_Normal
print enemies_com_agressive[2].getInstructions()
#>>>GetInstructions_Agressive

enemies_com_hgd = CreateEnemy(5, 'Ins_HGD', True) #interactive
print enemies_com_hgd[0].getInstructions()

#Traceback (most recent call last):
#  File "python", line 56, in <module>
#  File "python", line 21, in getInstructions
#NotImplementedError: 'Ins_HGD' <<<<< no Instruction Implemented for  Ins_HGD

我假设你有一个叫做敌人的类

class Enemies:
  def getInstructions():
    return "instructions"

现在需要一个方法来创建一堆敌人实例

def create_enemies(num_of_enemies):
  enemies = []
  for i in range(num_of_enemies):
    enemies.append(enemy)
  return enemies

然后用上面的方法制造敌人如下:

enemy1, enemy2 , enemy3 = create_enemies(3)

请包括一些代码,这样你可以得到更好的答案,但不,你不需要写返回函数,你可以在我的例子中看到。你知道吗

class Enemies:
    def getInstructions(self):
        print("Instructions")

def createEnemy():
    global allEnemy
    allEnemy.append(Enemies())

allEnemy = []
createEnemy()
createEnemy()

for enemy in allEnemy :
    enemy.getInstructions()

相关问题 更多 >