簡體   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