第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

不明白應(yīng)該從父類(lèi)繼承的這個(gè) AttributeError 的原因

不明白應(yīng)該從父類(lèi)繼承的這個(gè) AttributeError 的原因

繁花不似錦 2023-06-20 14:22:04
我對(duì) OOP 和 Pygame 比較陌生,一直在嘗試編寫(xiě)塔防游戲,但遇到了障礙。我不斷收到此錯(cuò)誤:AttributeError: type object 'Game' has no attribute 'path'我曾嘗試閱讀有相同問(wèn)題的人的帖子,但似乎沒(méi)有任何修復(fù)對(duì)我有用。我試圖在我的游戲中有幾個(gè)不同的級(jí)別,它們具有不同的背景,因此具有不同的路徑。我試圖通過(guò)創(chuàng)建一個(gè)父Game類(lèi)然后為每個(gè)級(jí)別創(chuàng)建一個(gè)子類(lèi)來(lái)做到這一點(diǎn)。(我程序中的每個(gè)類(lèi)都有不同的 .py 文件。)理想情況下,每個(gè)關(guān)卡子類(lèi)都有自己的path屬性,該屬性將覆蓋path游戲類(lèi)中的屬性。然后將其path傳遞到我的Enemy班級(jí),其中有使敵人跟隨路徑的代碼。我可以通過(guò)將self.path(在我的游戲類(lèi)中)放在構(gòu)造函數(shù)之上并將其定義為path. 但是在這樣做時(shí),我無(wú)法或不知道如何覆蓋子類(lèi)中的屬性。此外,在我的敵人類(lèi)中,我試圖通過(guò)將游戲類(lèi)放在較低的位置來(lái)規(guī)避與游戲類(lèi)進(jìn)行循環(huán)導(dǎo)入的問(wèn)題,我認(rèn)為這可能與它有關(guān),但是,我不確定。如果是這種情況,是否有更好的方法讓我的敵人班級(jí)訪問(wèn)該路徑?這是我的關(guān)卡選擇文件的相關(guān)代碼:# If button is pressed then execute its corresponding functionif event.type == pygame.MOUSEBUTTONDOWN:    # If level 1 button is pressed then instantiate Level 1    if level1.buttonPress(pos):        level1_class = Level1(self.screen)        # Runs the main game loop for the instantiated level        level1_class.run()這是我班級(jí)的相關(guān)代碼Enemy:import pygamelightGreen = (0, 255, 0)red = (200, 0, 0)# Creates Enemy classclass Enemy(pygame.sprite.Sprite):    imgs = []    def __init__(self):        pygame.sprite.Sprite.__init__(self)        self.width = 150        self.height = 150        self.max_health = 100        self.health = 100        self.path = [(0, 0)]        self.x = self.path[0][0]        self.y = self.path[0][1]        self.img = None        self.animation = 0        self.speed = 1        self.i = 1        self.pos_check = 0    # Draws the sprite to the screen    def draw(self, screen):        # Only works for the first time it is called        if self.pos_check == 0:            self.pos_check += 1            # Sets starting x and y as the first co-ordinates of the path            from Game import Game            self.x = Game.path[0][0]            self.y = Game.path[0][1]        # Chooses an image from a list of images based on the number of self.animation        self.img = self.imgs[self.animation]        # Draws image        screen.blit(self.img, (self.x - self.width / 2, self.y - self.height / 2))        # Draws health bar        self.draw_health_bar(screen)
查看完整描述

1 回答

?
慕少森

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊

問(wèn)題是Game對(duì)象永遠(yuǎn)不會(huì)被實(shí)例化——也就是說(shuō),只有 的定義,而不是調(diào)用函數(shù)的Game變量版本“副本” 。Game.__init__()顯然,在調(diào)用 Game 初始化程序之前,成員變量game.path不存在(因?yàn)樗窃?中定義的__init__())。


有兩種解決方法。第一種是使Game對(duì)象的成員成為純靜態(tài)的:


class Game:

    path = [(-30, 783), (0, 783), (271, 767), (369, 471), (566, 414), (625, 352), (699, 138), (856, 93), (1206, 93), (1400, 46), (1500, 97), (1759, 97), (1784, 311), (1622, 434), (1487, 734), (1670, 789), (1756, 842), (1782, 1016), (1782, 1200)]


    def __init__(self, screen):

        self.path = 

        self.enemies = None

        self.towers = None

這允許Game.path獨(dú)立于任何初始化自由訪問(wèn)。但是看看你班上的其他人,這似乎不是它設(shè)計(jì)的工作方式。


因此,更好的方法是簡(jiǎn)單地實(shí)例化一個(gè)Game對(duì)象:


import Game


...


game = Game()   # Create an instantiated Game object.


...


    # Sets starting x and y as the first co-ordinates of the path

    self.x = game.path[0][0]

    self.y = game.path[0][1]

此處似乎對(duì) Python Object Instantiation 進(jìn)行了合理的描述。如果您不熟悉面向?qū)ο蟮母拍?,那么花時(shí)間閱讀它可能是值得的。


查看完整回答
反對(duì) 回復(fù) 2023-06-20
  • 1 回答
  • 0 關(guān)注
  • 153 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)