2017-02-12 5 views
1

Код для создания связанного списка.Отображение экземпляров классов?

Я создал экземпляр узла с именем a и дал ему элемент «привет» и создал экземпляр узла с именем b, а затем дал ему значение 'world', а затем сделал a.setOther(b);

Когда я тогда набираю a.getOther() Я не получаю «мир», но получаю <__main__.Node at 0x140ae7fafd0>.

Это как указатель, указывающий местоположение данных на моем диске? Если да, то как мне отображать данные из этого местоположения?

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

Первая часть вопроса является дубликатом. Вторая часть также может быть, хотя и не так очевидно. Вам нужно использовать 'a.getOther()', а не 'a.getOther', если вы хотите вызвать метод, - но зачем беспокоиться с геттерами и сеттерами? Он устарел, но следующее стоит прочитать: http://dirtsimple.org/2004/12/python-is-not-java.html Или это: http://www.python-course.eu/python3_properties.php –

+0

Хорошо, спасибо. Я собираюсь отредактировать сообщение только во второй половине вопроса. Я также заметил, что сделал ошибку - я хотел сказать: 'a.getOther()' not 'a.getOther' – teddyv

+0

Вы получаете' <__ main __. Node at 0x140ae7fafd0> ', потому что класс' Node' не определяет '__str__' или' __repr__', поэтому используется нечто общее. – martineau

ответ

0

Это не проблема, на самом деле, код работает нормально, и вы можете убедиться в том, что getOther делает правильную вещь, с помощью простого равенства:

a.getOther() == b 
True 

проблема в том, что при выполнении a.getOther() интерпретатор вызовет __repr__ объекта, который был возвращен для его распечатки. Если вам нужны пользовательские представления, вам необходимо указать его, добавив __repr__:

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

выход __repr__ в идеале должен быть похож на заявление вы бы использовать для построения Node объекта.

Аналогичным образом вам необходимо определить __str__, если вы напечатаете объект с помощью print и хотите получить более удобное для пользователя представление.

0

Я создал экземпляр Node назвал, и дал ему пункт «привет», и создал экземпляр узла с именем Ь, а затем дал ему значение «мира»,

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

, а затем сделал a.setOther(b);

a.setOther(b) 

Когда я тогда типа a.getOther() я не получаю 'world'

setOther(b) хранит ссылку на Node b; когда вызывается a.getOther() (в вашем коде) вы просто вернули return self.other, который является адресом ссылки; тогда как вам нужен item внутри Node b. так что вы должны вместо этого вернулся return self.other.item

Попробуйте это:

def getOther(self): 
    return self.other.item 
Смежные вопросы