【问题标题】:Python/Pygame errors in class inheritance类继承中的 Python/Pygame 错误
【发布时间】:2015-12-01 07:47:21
【问题描述】:

所以我一直在使用类和继承,根据我有限的理解,我收集到属性应该被继承。但是,下面的第一组代码会引发此错误:'AttributeError: type object 'Characters' has no attribute 'posX' with the following code:

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' object has no attribute '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,...),但它仍然会抛出相同的错误。是不是我做错了什么?

【问题讨论】:

    标签: python class python-3.x inheritance pygame


    【解决方案1】:

    实例变量是继承的,因此只需通过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 返回继承的值。

    【讨论】:

    • 看,这就是我最初的想法,但它仍然抛出这个错误:AttributeError: 'pygame.Surface' object has no attribute 'posX'
    • 您的代码中没有对 pygame.Surface 的引用,因此错误发生在其他地方。您应该查看行号并检查您是否理解上面示例中的继承语法。
    猜你喜欢
    • 2021-02-14
    • 1970-01-01
    • 2012-09-16
    • 2023-03-19
    • 2019-03-25
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多