为了账号安全,请及时绑定邮箱和手机立即绑定

类“...”的未解析的属性引用“...”

类“...”的未解析的属性引用“...”

函数式编程 2021-12-21 11:05:17
当我调用Zombie类中的render()方法时,我想将Zombie对象的一个实例添加到ZombieList.list中。当我尝试这样做时,它说list类的未解析属性引用ZombieList。我应该尝试以另一种方式做到这一点吗?class ZombieList:    def __init__(self):        self.list = []        for zombie in self.list:            ds.blit(zombie.image, (1000, random.randint(10, 790)))class Zombie(object):    def __init__(self):        self.attack = 3        self.speed = 5        self.health = 30        self.image = pygame.image.load("Assets/green zombie.png")        self.zombieList = []    def render(self):        ZombieList.list.append(self)
查看完整描述

3 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

您必须创建一个ZombieList对象,您可以将Zombie对象附加到其中。

您可以添加一个类的对象向类Zombie:


class Zombie(object):


    zombies = ZombieList()


    def __init__(self):

        self.attack = 3

        self.speed = 5

        self.health = 30

        self.image = pygame.image.load("Assets/green zombie.png")


    def render(self):

        Zombie.zombies.list.append(self)


查看完整回答
反对 回复 2021-12-21
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

您不能附加到类列表。您需要附加到类的实例。例如:


class ZombieList:

    def __init__(self):

        self.list = []

        for zombie in self.list:

            ds.blit(zombie.image, (1000, random.randint(10, 790)))


my_zombie_list = ZombieList() # create an instance


class Zombie(object):

    def __init__(self):

        self.attack = 3

        self.speed = 5

        self.health = 30

        self.image = pygame.image.load("Assets/green zombie.png")


        self.zombieList = []


    def render(self):

        my_zombie_list.list.append(self) # refer to the previously created instance


查看完整回答
反对 回复 2021-12-21
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

没有属性list在ZombieList。只有在您创建了一个ZombieListthrough eg 之后,self.zombie_list = ZombieList()您才能通过 使用您的列表self.zombie_list.list。


尽管如此,我想这可能不是您想要的设计:我想您不希望ZombieList每个人都有一个Zombie. 相反,初始化Zombie对象的人也应该负责维护ZombieList实例。


您还会遇到其他问题。例如,在循环


self.list = []

for zombie in self.list:

    ds.blit(zombie.image, (1000, random.randint(10, 790)))

永远不会有任何影响,因为self.list在执行该代码时始终为空(因为您已在上一行将其定义为空)。


查看完整回答
反对 回复 2021-12-21
  • 3 回答
  • 0 关注
  • 1605 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信