AttributeError:“ Fighter”对象没有属性“ Fighter”

时间:2018-07-31 09:02:10

标签: python python-3.x attributes super attributeerror

我对此并不陌生,并且遇到了一个错误,我希望有人可以帮助我并解释我的错误。

错误:

  

第178行,在applyThrust中
  shipPos = self.Fighter.getPos(self.origin)
  AttributeError:“ Fighter”对象没有属性“ Fighter”

    class Fighter(SphereCollideObj, object):
        fighterCount = 0

        def __init__(self, modelPath, parentNode, nodeName, posVec, traverser, scaleVec = 1.0):
            super(Fighter, self).__init__(modelPath, parentNode, nodeName, 0, 0, 0, 3.0)
            self.modelNode.setScale(scaleVec)
            self.modelNode.setPos(posVec)

            self.trav = traverser

            self.origin = render.attachNewNode("origin")
            self.origin.setPos(0, 0, 0)
            self.origin.hide()

            self.setKeyBindings()

            self.hud = Hud("./Tools/Hud.x", self.modelNode, "Hud", (0, 10, 0))



        def setKeyBindings(self):
            self.accept("space", self.thrust, [1])
            self.accept("space-up", self.thrust, [0])

        def thrust(self,keyDown):
            if keyDown:
                taskMgr.add(self.applyThrust, "thrust")
            else:
                taskMgr.remove("thrust")
                self.acceptOnce("space", self.thrust,[1])
                self.acceptOnce("space-up", self.thrust,[0])
        def applyThrust(self, task):
            shipPos = self.Fighter.getPos(self.origin)
            hudPos = self.hud.modelNode.getPos(self.origin)

            trajectory = hudPos - shipPos
            rate = 5
            trajectory.normalize()
            self.Fighter.setFluidPos(shipPos + trajectory * rate)

2 个答案:

答案 0 :(得分:0)

在这种情况下,“自我”是什么?我的意思是,它代表什么类的对象? 我认为该错误消息很有帮助。

def applyThrust(self,task)->类Fighter的方法。

self.Fighter->调用“ Fighter”成员或“ self”的属性,在本例中为Fighter实例。

您将在self.Fighter.setFluidPos(...)中遇到相同的错误

答案 1 :(得分:0)

我认为Mircea想要说的是Fighter中的self.Fighter.getPos(self.origin)是多余的。看到对象属于类Fighterself.getPos(self.origin)就足够了(假设超类具有一个名为getPos()的方法,则无需显示其代码)。 / p>