我是Python新手,正在研究存儲有關書籍的有意義數據段的類。我已經開始如下:從類__init__方法調用函數時未定義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
作爲類中的一個方法,像這樣:0
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>"
在這種情況下,包含在此呼籲:
在這兩種情況下,試圖實例從另一個文件BookDisplay
時:
from bookdisplay import BookDisplay
...
...
thumbnails = []
...
thumbnails.append(BookDisplay(titleField, "-1", float(priceField), imgField, linkField))
...我碰到下面的全局名稱錯誤(這回溯特別是對於不-within-class功能):
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
是完全無障礙的課堂。
奇怪的是,我沒有從我描述的第一種方法(在類方法之外)進行更改,退出解釋器並嘗試再次運行所有內容。它以某種方式工作。我不知道爲什麼。 – nicole 2013-04-30 23:02:51