2017-02-12 6 views
1

Der folgende Code dient zum Erstellen einer verknüpften Liste.Anzeige von Klasseninstanzen?

Ich erstellte eine Instanz von Node namens a, gab ihm ein Element 'Hallo', und erstellte eine Instanz eines Node namens b, und gab ihm dann einen Wert 'world', und tat dann a.setOther(b);

Wenn ich dann a.getOther() eingeben bekomme ich nicht "Welt", aber ich bekomme <__main__.Node at 0x140ae7fafd0>.

Ist dies wie ein Zeiger, der den Speicherort der Daten auf meiner Festplatte angibt? Wenn ja, wie zeige ich dann die Daten von diesem Standort an?

class Node(object): 
    def __init__(self, item, other = None): 
     self.item = item 
     self.other = other 

    def getItem(self): 
     return self.item 

    def getOther(self): 
     return self.other 

    def setItem(self, item): 
     self.item = item 

    def setOther(self, other): 
     self.other = other 
+1

Der erste Teil der Frage ein Duplikat ist. Der zweite Teil könnte genauso gut sein, wenn auch nicht so offensichtlich. Sie müssen 'a.getOther()' anstatt 'a.getOther' verwenden, wenn Sie die Methode aufrufen möchten - aber warum sollten Sie sich mit Gettern und Settors beschäftigen? Es ist veraltet, aber das folgende ist eine Lektüre wert: http://dirtsimple.org/2004/12/python-is-not-java.html Oder das: http://www.python-course.eu/python3_properties.php –

+0

Ok, danke. Ich werde den Beitrag nur für die zweite Hälfte der Frage bearbeiten. Ich bemerkte auch, dass ich einen Fehler machte - ich wollte 'a.getOther()' nicht 'a.getOther' sagen. – teddyv

+0

Sie erhalten' <__ main __. Knoten bei 0x140ae7fafd0> 'weil die' Node' Klasse keine a definiert '__str__' oder' __repr__' Methode, so wird etwas Generisches verwendet. – martineau

Antwort

0

Dies ist kein Problem, wirklich, der Code funktioniert in Ordnung und Sie können überprüfen, ob getOther das Richtige durch eine einfache Gleichheit tut:

a.getOther() == b 
True 

das Problem, dass, wenn Sie a.getOther() ausführen Der Interpreter ruft die __repr__ des zurückgegebenen Objekts an, um es auszudrucken. Wenn Sie eine benutzerdefinierte Darstellung benötigen, müssen Sie es an, indem eine __repr__ Zugabe:

def __repr__(self): 
    return "Node({0}, {1})".format(self.item, self.other) 

die Ausgabe von __repr__ sollte idealerweise ähnlich der Aussage Sie das Node Objekt zu konstruieren verwenden würde.

In ähnlicher Weise müssen Sie eine __str__ definieren, wenn Sie ein Objekt mit print drucken und eine benutzerfreundlichere Darstellung für den Benutzer gewünscht.

0

ich erstellt eine Instanz von Knoten eine benannte, und gab es ein Element ‚Hallo‘, und erstellt eine Instanz eines Node genannt b und gab es dann einen Wert ‚Welt‘,

a = Node('hello') 
b = Node('world') 

und tat dann a.setOther(b);

a.setOther(b) 

Wenn ich a.getOther() geben Sie dann verstehe ich nicht 'world'

setOther(b) eine Referenz von Node b speichert; Wenn a.getOther() aufgerufen wird (in Ihrem Code), haben Sie einfach return self.other zurückgegeben, was die Adresse der Referenz ist; während Sie die item innerhalb der Node b benötigt. so sollten Sie stattdessen return self.other.item zurückgegeben haben diese

Versuchen:

def getOther(self): 
    return self.other.item 
Verwandte Themen