Python 调用后设置 class 变量

Python set class variable after calling

我正在使用 pygame 模块制作游戏并且我有一个玩家 class:

class Player(pygame.sprite.Sprite):
def __init__(self, name, position, axsis, movment, idle, walk = None, jump = None):
    pygame.sprite.Sprite.__init__(self)
    self.name = name
    self.idle = idle
    self.walk = walk
    self.jump = jump
    self.image = self.idle[0]
    self.movment = movment 
    self.left, self.right  = axsis
    self.pos = vec(position[0],position[1])

我正在使用 json 数据类型添加我的角色,并在调用 class 后尝试添加动画,但我做不到

示例代码

class Game():
    def __init__(self,json_file):
        self.player_attribute = json_file

    def character(self):
          self.npc = []
          for i in self.player_attribute:
              self.npc.append(Player(i['name'],
                                     i['position'],
                                     i['axsis'],
                                     i['movment']))
          self.animation()
          return self.npc

    def add_animation(self):
        for i in self.npc:
            i.idle = "images\ghost.png" 
    def main_loop()
        self.character

当我尝试这个时出现错误

self.image = self.idle[0] TypeError: init() missing 1 required positional argument: 'idle'

如何在调用 class

后添加 class 的变量

不清楚 'idle' 参数在您的代码中应该代表什么。但是,出现异常的原因是您在构造 Player 对象时没有为 'idle' 传递任何参数。你需要这样的东西:

          self.npc.append(Player(i['name'],
                                 i['position'],
                                 i['axsis'],
                                 i['movment'],
                                 i['idle']))

您可以这样做,也可以将默认参数传递给 Player 构造函数,以便在初始化时不需要显式传递 idle:

class Player(pygame.sprite.Sprite):
def __init__(self, name, position, axsis, movment, idle=[1], walk = None, jump = None):

您可以稍后修改它的内容,但是我建议您小心将该对象属性实例化为什么,因为它可能稍后会反咬您一口(类型错误或值错误)。

如果是我,我会把它移出 init,或者直到所有值及其类型都已知后才构建对象(请参阅构建器设计模式)。

希望这对您有所帮助 :) 干杯!