2016-03-19 6 views
1

Ich versuche eine Klasse zu erstellen, die eine URL akzeptiert und es mir erlaubt, sie in Teile zu teilen und das Schema, den Server und den Pfad zurückzugeben.Python-Erstellen eines Class-x-Objekts hat kein Attribut 'split'

class SimpleURL: 
    def __init__(self,url): 
     self.url=url 
    def scheme(self): 
     return url.split("://")[0] 
    def server(self): 
     return url.split("/")[2] 
    def path(self): 
     return url.split(url.split("/")[2])[1] 

test_url = SimpleURL("https://gumgoose.com/larry/friendo") 

Dann, wenn ich

test_url.scheme() 

oder einen beliebigen Server oder Pfad laufen lasse, erhalte ich die Fehler

NameError: name 'url' is not defined 

ich in der Lage bin, damit es funktioniert, wenn ich die URL der zuweisen Variable "URL" außerhalb der Funktion, aber nach meinem Verständnis, sollte die Zeile beginnen "test_url" das für mich tun.

Kann jemand etwas Licht auf mich für dieses Licht werfen?

+0

Tun Sie dies nur für die Praxis? Wenn Sie URLs wirklich parsen wollen, ist dies ein Modul in der Standardbibliothek: https://docs.python.org/2/library/urlparse.html – PaulMcG

Antwort

3

In allen Klassenmethoden müssen Sie explizit self verwenden, um auf alle anderen Klassenmethoden und -attribute zu verweisen.

def scheme(self): 
    return self.url.split('://')[0] 

Wenn Sie dies nicht tun, Python wird nur den lokalen Bereich suchen innerhalb Ihrer Methode und die globale Reichweite. Wenn Sie also außerhalb Ihrer Klasse definieren, haben Sie keine Probleme.

+0

Duh! Das scheint jetzt so offensichtlich, nachdem du es gesagt hast. Es funktioniert jetzt perfekt, danke! –

+0

@NathanWall Wenn das Ihr Problem gelöst hat, sollten Sie es als eine Lösung für andere mit ähnlichen Fragen in der Zukunft auswählen. – Suever

1

Python erfordert, dass Sie die Instanz-Objekt zu d return self.url.split Referenz (': //') [0]

Verwandte Themen