Python–访问类属性Python时发生对象AttributeError

2024-09-30 00:28:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有三个类:ItemWeapon,和{} 当我试图访问BrassSword的一个属性,例如(名称、图像等),它会说,AttributeError: class BrassSword has no attribute 'image'

代码如下:

import pygame, math, random

class Item(object):
    def __init__(self,name,image,reuseable,value):
        self.image=pygame.image.load(image)
        self.itemattrs = ['name','image','reuseable','value']
        self.path = image
        self.name = name
        self.x=0
        self.y=0
        self.reusable = reuseable
        self.value = value
        self.rect = [self.x,self.y,self.image.get_size()[0],self.image.get_size()[1]]
    def onUse(self):
        pass
    def onThrow(self):
        pass

class Weapon(Item):
    def __init__(self,name,image,value,damage,maxdamage,speed):
        super(Weapon,self).__init__('Weapon',image,True,value)
        self.itemattrs = ['name','image','damage','maxdamage','value','speed']
        self.damage=damage
        self.maxdamage=maxdamage
        self.speed = speed # Cooldown in frames
        self.cooldown = 0
    def onUpdate(self):
        self.cooldown -= 1
    def onUse(self,targetEntity):
        if self.cooldown > 0:
            return
        self.cooldown = speed
        targetEntity.hp-=random.range(damage,maxdamage)

        if targetEntity.hp <= 0:
            targetEntity.onDie()
    def onThrow(self):
        pass # TODO: Add throwing weapons

class BrassSword(Weapon):
    def __init__(self):
        super(BrassSword,self).__init__('item.weapon.brass_sword','testlevel/Ball.png',True,value,3,10,12)

Tags: nameimageselfinitvaluedefitemclass
1条回答
网友
1楼 · 发布于 2024-09-30 00:28:31

您没有发布真正导致错误的代码-即访问属性的位置。但是,不能通过引用类来访问实例属性-它们存储在单独的__dict__中。超类在__init__()中实例化时设置这些属性,作为self的属性。在此之后,只能通过self实例访问它们。在

如果您试图访问与此类似的属性:

a = BrassSword.image

相反,您需要像这样访问它:

^{pr2}$

或者:

sword = BrassSword().image

如果要在所有brassword实例中共享一个映像,则需要将其声明为类属性,如下所示:

class BrassSword(Weapon):
    image = 'path/to/image'
    def __init__(...):
        ...

相关问题 更多 >

    热门问题