Python - nom global n'est pas défini lors de l'appel de fonction à partir de la classe de __init__ de la méthode
Je suis nouveau sur le Python et de travailler sur une classe pour le stockage des données significatives morceaux sur les livres. J'ai démarré comme suit:
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 = ""
Je pensais que ce __init__
méthode serait tout simplement être en mesure d'appeler MakeXMLString
, lequel j'ai défini dans le même fichier (bookdisplay.py), juste en dessous de la BookDisplay
classe:
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
À l'origine, j'ai effectivement eu MakeXMLString
comme une méthode dans la classe, comme ceci:
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>"
Dans ce cas, __init__
contenu de cet appel:
self.xmlString = self.MakeXMLString()
Dans les deux cas, lorsque vous essayez d'instancier BookDisplay
à partir d'un autre fichier:
from bookdisplay import BookDisplay
...
...
thumbnails = []
...
thumbnails.append(BookDisplay(titleField, "-1", float(priceField), imgField, linkField))
...J'ai le nom global d'erreur (ce traceback en particulier pour le pas-dans-classe de fonction):
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
Ce qui me manque ici? À partir de ce que je peux dire, MakeXMLString
est parfaitement accessible à la classe.
OriginalL'auteur nicole | 2013-04-30
Vous devez vous connecter pour publier un commentaire.
lorsque vous avez défini
MakeXMLString
comme méthode, il n'est pas de retour, doncécrasera
self.xmlString
et d'en faire le point de la méthode elle-même.Avec la façon dont vous l'avez défini maintenant,
MakeXMLString
n'est pas accessible à partir de l'autre fichier, vous devez l'importer manuellement, en utilisant:EDIT:
lors de la relecture, vous n'êtes pas à l'appel de
MakeXMLString
de l'autre fichier, donc l'erreur est dans bookDisplay.py; assurez-vous queest sur le même niveau d'indentation que la définition de la classe, sinon ça va être interprété comme une méthode.
OriginalL'auteur donghyun208