Python 为什么这段代码总是返回一个';没有属性';错误?

Python 为什么这段代码总是返回一个';没有属性';错误?,python,Python,我的代码如下所示,其中sdl2ext.Entity是第三方类 class Grid(sdl2ext.Entity): def __init__(self, world): self.w = 3 self.h = 3 super(Grid,self).__init__() def dump(self): print(self.w) def run(): world = sdl2ext.World()

我的代码如下所示,其中
sdl2ext.Entity
是第三方类

class Grid(sdl2ext.Entity):
    def __init__(self, world):
        self.w = 3
        self.h = 3
        super(Grid,self).__init__()

    def dump(self):
        print(self.w)

def run():
    world = sdl2ext.World()
    g = Grid(world)
    g.dump()

if __name__ == "__main__":
    run()
我得到的具体错误是关于行
print(self.w)

AttributeError:对象“网格”没有属性“w”


这与不初始化底层基本对象sdl2ext.Entity有关吗?

您应该阅读。该类覆盖了许多特殊方法,包括
\uuu getattr\uuu
,这可能与您的问题有关。

设置私有属性后为什么要初始化超类?因为这里给出了答案:。特别是在接受的答案中给出的
CastSpell
类的定义。您误解了。为什么要在设置私有属性之后而不是之前初始化超类?@BartoszKP您能详细说明一下吗?@Ignacio,在该链接问题的公认答案中,超类是在私有属性之后初始化的。我认为这样做是可以的。
\uuuu getattr\uuuu
只被称为后备
self.w
首先在实例
\uuuuu dict\uuuuu
中查找,
\uuuuuu getattr\uuuuuuu
只有在那里找不到时才会被查询。请参阅:在属性查找未在通常位置找到属性时调用(即,它既不是实例属性,也没有在
self
的类树中找到)那么@Martijn你是说getattr不是问题吗?@patchwork:我是说
\uu getattr\uu
不可能是问题。