我是 Python 的新手,正在研究一个用于存储有意义的书籍数据片段的类。我已经开始如下:
class BookDisplay:
def __init__(self, _name, _isbn, _price, _picture, _link):
self.name = _name
self.isbn = _isbn
self.price = _price
self.picture = _picture
self.link = _link
self.xmlString = MakeXMLString(_name, _isbn, _price, _picture, _link)
name = ""
isbn = ""
price = 0.0
picture = "" #a URL
link = ""
xmlString = ""
我认为这个 __init__
方法只能调用 MakeXMLString
,它是我在同一个文件 (bookdisplay.py) 中定义的,就在 BookDisplay 的下面
类:
def MakeXMLString(_name, _isbn, _price, _picture, _link): #python multi-line syntax
xmlString = "<name>" + _name + "</name>" \
+ "<isbn>" + _isbn + "</isbn>" \
+ "<price>" + str(_price) + "</price>" \
+ "<picture>" + _picture + "</picture>" \
+ "<link>" + _link + "</link>"
return xmlString
最初,我实际上将 MakeXMLString
作为类中的一个方法,如下所示:
def MakeXMLString(self):
self.xmlString = "<name>" + self.name + "</name>" \
+ "<isbn>" + self.isbn + "</isbn>" \
+ "<price>" + str(self.price) + "</price>" \
+ "<picture>" + self.picture + "</picture>" \
+ "<link>" + self.link + "</link>"
在这种情况下,__init__
包含此调用:
self.xmlString = self.MakeXMLString()
在这两种情况下,当尝试从另一个文件实例化 BookDisplay
时:
from bookdisplay import BookDisplay
...
...
thumbnails = []
...
thumbnails.append(BookDisplay(titleField, "-1", float(priceField), imgField, linkField))
...我收到以下全局名称错误(此回溯特别针对非类内函数):
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "search.py", line 30, in ebaySearch
handleDocument(doc)
File "search.py", line 59, in handleDocument
handleItems(items, outputFile)
File "search.py", line 102, in handleItems
thumbnails.append(BookDisplay(titleField, "-1", float(priceField), imgField, linkField))
File "bookdisplay.py", line 15, in __init__
self.xmlString = MakeXMLString(_name, _isbn, _price, _picture, _link)
NameError: global name 'MakeXMLString' is not defined
我在这里错过了什么?据我所知,类可以完全访问 MakeXMLString
。
最佳答案
当您将 MakeXMLString
定义为方法时,它不会返回任何内容,所以
self.xmlString = self.MakeXMLString()
将覆盖 self.xmlString
并使其指向方法本身。
按照您现在定义的方式,无法从其他文件访问 MakeXMLString
,因此您还必须通过以下方式手动导入它:
from bookdisplay import BookDisplay, MakeXMLString
编辑:
重新阅读后,您没有从其他文件调用 MakeXMLString
,因此错误在 bookDisplay.py 中;确保
def MakeXMLString()
与类定义处于同一缩进级别,否则将被解释为方法。
关于Python - 从类 __init__ 方法调用函数时未定义全局名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16310074/