2016-07-10 8 views
0

Verwendung Ich habe die folgende Klasse definiert als:definieren Instanzvariablen Funktionen und Instanzmethoden in __init__

def user_kitchen(handle): 
    # return a BeautifulSoup object 


class User(object): 

    def __init__(self, handle): 
     self.handle = str(handle) 
     self.soup = user_kitchen(handle) 
     self.details = self.find_details() 

    def find_details(self): 
     value_map = {} 
     for detail, attribute in details_map: 
      value = (self.soup).find_all(attrs=attribute)[0].text 
      value_map[detail] = value 
     return value_map 

Als ich die Klasse instanziiert User als:

me = User('torvalds') 

Ich erhalte eine NameError: name 'self' is not defined

Hier ist die Rückverfolgung:

In []: me = User('torvalds') 
NameError       Traceback (most recent call last) 
<ipython-input-61-f6d334f2ee24> in <module>() 
----> 1 me = User('torvalds') 

/home/user.py in __init__(self, handle) 
    28   value_map = {} 
    29   for detail, attribute in details_map: 
---> 30    value = (self.soup).find_all(attrs=attribute)[0].text 
    31    value_map[detail] = value 
    32   return value_map 

/home/user.py in _find_details(detail) 
    18 
    19 
---> 20 class User(object): 
    21 
    22  def __init__(self, handle): 

NameError: name 'self' is not defined 

Ich habe auf SO über Aufruf Instanzmethoden von __init__ Methode bei einigen ähnlichen Fragen sah:

Doch das vermag ich nicht zu beheben.

+0

Bitte posten Sie volle Stack-Trace – masnun

+0

@masnun Hinzugefügt es. Danke für die Signierung :) –

+0

Die Zeilen im Stack-Trace sind in Ihrem Code-Snippet nicht verfügbar. Ist es möglich, den vollständigen Code zu posten? – masnun

Antwort

1

Entsprechend Ihrer Stack-Trace sehe ich eine Methode mit der Signatur - _find_details(detail). Innerhalb dieser Methode gibt es eine Zeile wie - value = (self.soup).find_all(attrs=attribute)[0].text.

Ihre Methode akzeptiert self nicht als ersten Parameter. So kann es self in diesem Zusammenhang nicht finden. Mach es _find_details(self, detail) - dann sollte es funktionieren.

+0

Danke @masnun. Ich habe das Problem gelöst. –

+0

Obwohl Ihre Antwort mir nicht geholfen hat, mein Problem zu lösen, habe ich es aufgrund Ihrer Sorgfalt akzeptiert und es ist technisch korrekt. :) –

Verwandte Themen