如何解决';上的导入错误;自我';没有在Python中全局定义?
所以我不断地得到这个错误,当我搜索它时,最常见的修复方法是确保一个类的所有方法都以“self”作为第一个参数。以下是错误:如何解决';上的导入错误;自我';没有在Python中全局定义?,python,syntax,ironpython,self,Python,Syntax,Ironpython,Self,所以我不断地得到这个错误,当我搜索它时,最常见的修复方法是确保一个类的所有方法都以“self”作为第一个参数。以下是错误: 文件“C:\Users\me\Documents\Project\code\model\TrainEvent.py”,第9行,在 名称错误:未定义全局名称“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...")
谢谢你的解释!