2017-02-18 42 views
0

Скажем, у меня есть класс ElementКак работает функция print()?

class Element(object): 
    def __init__(self,key,val): 
     self.key = key 
     self.val = val 

    def __str__(self): 
     return '(' + str(self.key) + ',' + str(self.val) + ')' 

Теперь, когда я пытаюсь напечатать массив, содержащий объекты класса Element

arr = [Element(10,20),Element(20,30)] 
print(arr) 

, выход -

[<maxheap.Element object at 0x01C1FCB0>, <maxheap.Element object at 0x01C270B0>] 

Какие функция печати <maxheap.Element object at 0x01C1FCB0>? Почему не метод __str__(self), называемый как print(Element(10,20))?

+1

Возможный дубликат [Разница между \ _ \ _ str \ _ \ _ и \ _ \ _ repr \ _ \ _ в Python] (http://stackoverflow.com/questions/1436703/difference-between-str-and- rep-in-python) – mkrieger1

ответ

-1

Попробуйте использовать

def __repr__(self): 

вместо

def __str__(self): 
0

Попробуйте использовать индексы вместо печати списка сразу, как это:
print(arr[0])
print(arr[1])


вместо:
print(arr)

EDIT:
Использование __repr__ работы в этом случае.

+0

Но почему? Использование __repr (self) __ решает проблему, означающую, что print() вызывает функцию repr(). Тогда я не понимаю использование __str (self) __. – Kakaji

+0

@Kakaji Than, пожалуйста, прочитайте документацию. Здесь очень ясно/подробно, и в этой сети есть реальный FAQ – frlan