gpt4 book ai didi

Python - 从类 __init__ 方法调用函数时未定义全局名称

转载 作者:行者123 更新时间:2023-11-28 17:47:17 25 4
gpt4 key购买 nike

我是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com