[英]Python/Pygame errors in class inheritance
因此,我一直在使用类和继承,并且由于我的有限理解,我收集到应该继承属性的信息。 但是,下面的第一组代码将引发以下错误:'AttributeError:类型对象'Characters'具有以下代码的属性'posX':
class Characters(object):
def __init__(self,health,posX,posY,width,height,dead,moveSpeed,yMove,xMove):
self.health = health
self.posX = posX
self.posY = posY
self.width = width
self.height = height
self.dead = dead
#self.image = image
self.yMove = yMove
self.xMove = xMove
class Player(Characters):
def __init__(self,images,gameOver):
self.images = (config.get('player'))
self.gameOver = gameOver
def move(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.gameOver = True
keysPressed = pygame.key.get_pressed()
if keysPressed[pygame.K_w]:
Characters.yMove = -Characters.moveSpeed
Characters.image = self.images[1]
if keysPressed[pygame.K_s]:
Characters.yMove = Characters.moveSpeed
Characters.image = self.images[0]
if keysPressed[pygame.K_a]:
Characters.xMove = -Characters.moveSpeed
Characters.image = self.images[2]
if keysPressed[pygame.K_d]:
Characters.xMove = Characters.moveSpeed
Characters.image = pygame.transform.flip(self.images[2],True,False)
Characters.posX += Characters.xMove
Characters.posY += Characters.yMove
并且使用以下代码,它将引发错误:AttributeError:'pygame.Surface'对象没有属性'posX'
class Player(Characters):
def __init__(self,images,gameOver,posX,posY):
self.images = (config.get('player'))
self.gameOver = gameOver
self.posX = posX
self.posY = posY
def move(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.gameOver = True
keysPressed = pygame.key.get_pressed()
if keysPressed[pygame.K_w]:
Characters.yMove = -Characters.moveSpeed
Characters.image = self.images[1]
if keysPressed[pygame.K_s]:
Characters.yMove = Characters.moveSpeed
Characters.image = self.images[0]
if keysPressed[pygame.K_a]:
Characters.xMove = -Characters.moveSpeed
Characters.image = self.images[2]
if keysPressed[pygame.K_d]:
Characters.xMove = Characters.moveSpeed
Characters.image = pygame.transform.flip(self.images[2],True,False)
self.posX += Characters.xMove
self.posY += Characters.yMove
我试过使用*args
和**kwargs
, super
方法和Parent.__init__(self, attr1, attr2,...)
,但是它仍然抛出相同的错误。 我做错了什么吗?
也许我错了(我是新手...!),但是:您是否不应该在class语句之后缩进构造函数和其他class方法? 这只是转录错误吗? 我主要指的是Pyhton 2.7,也许在3.x版本中已经改变了...
实例变量是继承的,因此只需通过self
引用它们即可访问它们,不要使用Characters
。 作为一个基本示例:
class A(object):
def __init__(self):
self.foo = 3;
class B(A):
def thefoo(self):
print self.foo
b = B()
b.thefoo()
在这里,B继承了A的实例变量foo,如您所见,B实例中的self.foo返回了继承的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.