繁体   English   中英

类继承中的Python / Pygame错误

[英]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**kwargssuper方法和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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM