Python子类实例无法访问父级初始化的变量

时间:2019-06-11 06:11:55

标签: python python-3.x pyglet

这是背景。我正在使用Pyglet库在python 3.7中制作游戏。我正在尝试访问仅在父类的dead函数中启动的名为__init__的布尔变量。在子类中,我在子类__init__中调用了父类的__init__函数。每当我尝试从子类继承的父方法访问dead变量时,都会不断收到错误消息,表明子类找不到该变量。

父类在physicalobject.py中称为PhysicalObject:

import pyglet

class PhysicalObject(pyglet.prite.Sprite):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.dead = False

子类在player.py(与physicalobject.py相同的目录。目录称为game)内被称为Player。

import pyglet
from game import physicalobject

class Player(physialobject.PhysicalObject):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        print(self.dead)

最后,从主脚本文件到一个目录级别,将它们放在一起并创建播放器:

import pyglet
from game import player

p = player.Player()

我不确定孩子为什么在self.dead的最后一行看不到print(self.dead),但是我知道我对继承的理解不正确。我不习惯使用python,但是在其他编程语言中,我们首先在__init__之前定义了变量,我知道在python中这样做会导致产生一个静态变量,但这似乎是我获取python的唯一方法结果我在寻找。我一直在寻找几个小时,试图使它通过所有在堆栈溢出时被问到的建议而顺利进行。

下面的确切错误:

AttributeError: 'Player' object has no attribute 'dead'

编辑:这从技术上来说从来没有得到回答,但是当我尝试做与裸露骨头完全相同的事情时,我得到了使用上述相同样式的语法的准系统脚本。我需要进一步分解项目以弄清楚到底发生了什么,但是当我发现时,我将再次修改此帖子。

2 个答案:

答案 0 :(得分:0)

import pyglet

class PhysicalObject(pyglet.sprite.Sprite):
  def __init__(self, *args, **kwargs):
    self.dead = False

class Player(PhysicalObject):
  def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    print(self.dead)

if __name__ == "__main__":
  p = Player()

它有效,请尝试正确导入PhysicalObject类。

答案 1 :(得分:0)

import pyglet
from game import physicalobject

class Player(physialobject.PhysicalObject):

  def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    PhysicalObject.__init__(self)
    print(self.dead)

这为我解决了