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