Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解决';上的导入错误;自我';没有在Python中全局定义?_Python_Syntax_Ironpython_Self - Fatal编程技术网

如何解决';上的导入错误;自我';没有在Python中全局定义?

如何解决';上的导入错误;自我';没有在Python中全局定义?,python,syntax,ironpython,self,Python,Syntax,Ironpython,Self,所以我不断地得到这个错误,当我搜索它时,最常见的修复方法是确保一个类的所有方法都以“self”作为第一个参数。以下是错误: 文件“C:\Users\me\Documents\Project\code\model\TrainEvent.py”,第9行,在 名称错误:未定义全局名称“self”按任意键继续。 这似乎是一个常见的错误,只是我的所有方法都有self作为第一个参数。然后我意识到回溯只是指向声明类名的行。它不是指向我调用self方法的那一行。这个错误早在那之前就被提出了。事实上,这似乎是

所以我不断地得到这个错误,当我搜索它时,最常见的修复方法是确保一个类的所有方法都以“self”作为第一个参数。以下是错误:


文件“C:\Users\me\Documents\Project\code\model\TrainEvent.py”,第9行,在
名称错误:未定义全局名称“self”按任意键继续。

这似乎是一个常见的错误,只是我的所有方法都有self作为第一个参数。然后我意识到回溯只是指向声明类名的行。它不是指向我调用self方法的那一行。这个错误早在那之前就被提出了。事实上,这似乎是在进口时提出的。这里是TrainEvent.py

    from xml.etree.ElementTree import Element

    class TrainEvent(object):

        def __init__(self, element):
            self._element = element
            self.MsgId = self.__tagGrab('MsgId')
            self.MsgTime = self.__tagGrab('MsgTime')
            self.Offset = self.__tagGrab('Offset')
            self.TranId = self.__tagGrab('TranId')
            self.Portal = self.__tagGrab('Portal')
            moveElem = self._element.find('Move')
            self.StartTime = self.__tagGrab('StartTime', moveElem)
            self.EndTime = self.__tagGrab('EndTime', moveElem)
            self.Type = self.__tagGrab('Type', moveElem)
            carElem = self._element.find('Car')
            self.Name = self.__tagGrab('Name', carElem)
            self.UniqueId = self.__tagGrab('UniqueId', carElem)
            self.Orientation = self.__tagGrab('Orientation', carElem)
            self.Wells = self.__tagGrab('Wells', carElem)
            self.Axles = self.__tagGrab('Axles', carElem)
            self.Length = self.__tagGrab('Length', carElem)
            self.IsEngine = self.__tagGrab('IsEngine', carElem)
            self.IsGhost = self.__tagGrab('IsGhost', carElem)

        def getTree(self):
            aTree = Element('ApsMessage')
            self.__addTag(aTree, 'MsgId', self.MsgId)
            self.__addTag(aTree, 'MsgTime', self.MsgTime)
            self.__addTag(aTree, 'Offset', self.Offset)
            self.__addTag(aTree, 'TranId', self.TranId)
            self.__addTag(aTree, 'Portal', self.Portal)
            moveElem = Element('Move')
            self.__addTag(moveElem, 'StartTime', self.StartTime)
            self.__addTag(moveElem, 'EndTime', self.EndTime)
            self.__addTag(moveElem, 'Type', self.Type)
            aTree.append(moveElem)
            carElem = Element('Car')
            self.__addTag(carElem, 'Name', self.Name)
            self.__addTag(carElem, 'UniqueId', self.UniqueId)
            self.__addTag(carElem, 'Orientation', self.Orientation)
            self.__addTag(carElem, 'Wells', self.Wells)
            self.__addTag(carElem, 'Axles', self.Axles)
            self.__addTag(carElem, 'Length', self.Length)
            self.__addTag(carElem, 'IsEngine', self.IsEngine)
            self.__addTag(carElem, 'IsGhost', self.IsGhost)
            aTree.append(carElem)
            return aTree

        def getTag(self):
            return self._element.tag

        def __tagGrab(self, tagName, parent=self._element):
            '''
            Helper function for XML reading operations.
            '''
            return parent.find(tagName).text


        def __addTag(self, element, tagName, textValue=None):
            '''
            Helper function for setting values for XML elements. Note that this
            function assumes unique tag name values within element.
            '''
            element.append(Element(tagName))
            if textValue:
                element.find(tagName).text = str(textValue)
因此,如果我所有的方法都有self作为第一个参数,并且调用堆栈指向类声明作为问题,但是self没有被全局定义,那么我在这里做错了什么


PS:如果有帮助的话,我正在使用最新的IronPython解释器,以防由于某种原因问题是IronPython特有的。

问题出在您的
\uu tagGrab
函数中:

def __tagGrab(self, tagName, parent=self._element):
标题中不能有
self
,而是要有
None
,然后在正文中更正:

def __tagGrab(self, tagName, parent=None):
    if parent is None:
        parent = self._element
    ...
原因是当创建类对象时,没有
self
;除了
globals()

为了向自己证明这一点,请尝试以下方法:

class TestClassCreation(object):
    print("Started creating class")
    print("names so far: %s" % vars())

    def __init__(self):
        pass
    print("now we have %s" % vars())

    def noop(self, default=None):
        print("this gets run when noop is called")
    print("and now have %s" % vars())
    print()

    print("and now we'll fail...")
    def failure(self, some_arg=self.noop):
        pass
    print("we never get here...")

谢谢你的解释!