【问题标题】:Repeatedly creating instances of an object without repeating code [closed]重复创建对象的实例而不重复代码[关闭]
【发布时间】:2021-11-02 18:32:05
【问题描述】:

我想制作一个游戏,玩家使用 Python 中的 pygame 模块点击鸭子。我想要 15 只鸭子,但我不想复制用于实例化鸭子并将其分配给变量 15 次的代码。我当前的代码如下,"eend" 是我用于鸭子的名称:

eend = Actor('eend')
eend._surf = pygame.transform.scale(eend._surf, (50, 50))
eend.pos = 425, 300

eend1 = Actor('eend')
eend1._surf = pygame.transform.scale(eend1._surf, (50, 50))
eend1.pos = 425, 300

eend2 = Actor('eend')
eend2._surf = pygame.transform.scale(eend2._surf, (50, 50))
eend2.pos = 425, 300

eend3 = Actor('eend')
eend3._surf = pygame.transform.scale(eend3._surf, (50, 50))
eend3.pos = 425, 300

eend4 = Actor('eend')
eend4._surf = pygame.transform.scale(eend4._surf, (50, 50))
eend4.pos = 425, 300

eend5 = Actor('eend')
eend5._surf = pygame.transform.scale(eend5._surf, (50, 50))
eend5.pos = 425, 300

eend6 = Actor('eend')
eend6._surf = pygame.transform.scale(eend6._surf, (50, 50))
eend6.pos = 425, 300

eend7 = Actor('eend')
eend7._surf = pygame.transform.scale(eend7._surf, (50, 50))
eend7.pos = 425, 300

eend8 = Actor('eend')
eend8._surf = pygame.transform.scale(eend8._surf, (50, 50))
eend8.pos = 425, 300

eend9 = Actor('eend')
eend9._surf = pygame.transform.scale(eend9._surf, (50, 50))
eend9.pos = 425, 300

eend10 = Actor('eend')
eend10._surf = pygame.transform.scale(eend10._surf, (50, 50))
eend10.pos = 425, 300

eend11 = Actor('eend')
eend11._surf = pygame.transform.scale(eend11._surf, (50, 50))
eend11.pos = 425, 300

eend12 = Actor('eend')
eend12._surf = pygame.transform.scale(eend12._surf, (50, 50))
eend12.pos = 425, 300

eend13 = Actor('eend')
eend13._surf = pygame.transform.scale(eend13._surf, (50, 50))
eend13.pos = 425, 300

eend14 = Actor('eend')
eend14._surf = pygame.transform.scale(eend14._surf, (50, 50))
eend14.pos = 425, 300

在不重复代码 15 次的情况下创建类 Actor 的多个实例的好方法是什么?

【问题讨论】:

  • 你真的应该学习列表和循环......也许从这里开始:learnpython.org/en/Loops
  • 您可以编写一个 for 循环并将您的 Actors 放在一个列表中,而不是 14 个类似的变量中。

标签: python list loops variable-assignment


【解决方案1】:

您可以创建一个为您创建鸭子的函数,然后创建一个鸭子列表(而不是将它们保留为单独的变量名称)。

def create_duck(name='eend', scale=(50, 50), pos=(425, 300)):
    eend = Actor(name)
    eend._surf = pygame.transform.scale(eend8._surf, scale)
    eend.pos = pos
    return eend

eends = []
for i in range(14):
    eends.append(create_duck())

您也可以在Actor 类中将此函数作为class method 使用

【讨论】:

  • 它很好,但后来我得到了这个:Traceback(最近一次调用最后):文件“D:\python程序\eendjes vangen\eend.py”,第15行,在 eend.append (create_duck()) 文件“D:\python programs\eendjes vangen\eend.py”,第 8 行,在 create_duck eend = Actor(eend) UnboundLocalError: local variable 'eend' referenced before assignment
  • @ibon eend = Actor(eend) 应该是 eend = Actor(name)
猜你喜欢
  • 1970-01-01
  • 2016-01-29
  • 2017-04-05
  • 1970-01-01
  • 2011-09-15
  • 2014-11-13
  • 1970-01-01
  • 2011-07-28
  • 1970-01-01
相关资源
最近更新 更多