Вот фон.Я делаю игру на Python 3.7 с использованием библиотеки Pyglet.Я пытаюсь получить доступ только к логической переменной с именем dead
, которая инициируется в функции __init__
родительского класса.В дочернем классе я вызывал функцию __init__
родителя в собственной __init__
дочерней функции.Всякий раз, когда я пытаюсь получить доступ к переменной dead
из родительских методов, унаследованных от дочернего класса, я получаю сообщение об ошибке, что дочерний класс не может найти переменную.
Родительский класс называется PhysicalObject в Physicalobject.py:
import pyglet
class PhysicalObject(pyglet.prite.Sprite):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.dead = False
Дочерний класс называется Player в player.py (тот же каталог, что и physobject.py. Каталог называется game
)
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 это приведет к статической переменной, но, похоже, это единственный способ получить результат:ищуЯ искал часы, пытаясь заставить это работать, выполняя каждое предложение, уже просимое о переполнении стека, но безуспешно.
Точная ошибка ниже:
AttributeError: 'Player' object has no attribute 'dead'
РЕДАКТИРОВАТЬ: Технически на это никогда не отвечали, но, пытаясь сделать то же самое, что и голые кости, насколько я мог, я заставил этот сценарий barebones работать с использованием того же стилизованного синтаксиса, что и выше.Мне нужно разбить свой проект дальше, чтобы точно понять, что происходит, но когда я узнаю, я вернусь, чтобы пересмотреть этот пост снова.