Python

2009-05-17 8 views
19

'da bir liste, dict veya nesne koleksiyonu nasıl yazdırılır __str__(self)'u uygulayan bir python sınıfını yazdım, ancak bu sınıfın örneklerini içeren bir listeyi yazdırdığımda, <__main__.DSequence instance at 0x4b8c10> varsayılan çıktısını aldım. Bunun işe yaraması için uygulamaya koymam gereken başka bir sihirli işlev var mı yoksa özel bir yazdırma işlevi mi yazmalıyım?Python

İşte sınıfı var:

class DSequence: 

    def __init__(self, sid, seq): 
     """Sequence object for a dummy dna string""" 
     self.sid = sid 
     self.seq = seq 

    def __iter__(self): 
     return self 

    def __str__(self): 
     return '[' + str(self.sid) + '] -> [' + str(self.seq) + ']' 

    def next(self): 
     if self.index == 0: 
      raise StopIteration 
     self.index = self.index - 1 
     return self.seq[self.index] 

cevap

22

Evet, __repr__ kullanmak gerekir. onun davranış hızlı bir örnek:

>>> class Foo: 
...  def __repr__(self): 
...    return '__repr__' 
... 
>>> bar = Foo() 
>>> bar 
__repr__ 
>>> print bar 
__repr__ 

Tüm işler kabul olarak,: Bir __str__ tanımlamak yoksa bu tavsiye edilmez rağmen

>>> class Foo: 
...  def __str__(self): 
...    return '__str__' 
...  def __repr__(self): 
...    return '__repr__' 
... 
>>> bar = Foo() 
>>> bar 
__repr__ 
>>> print bar 
__str__ 
>>> repr(bar) 
'__repr__' 
>>> str(bar) 
'__str__' 

Ancak, geri __repr__ düşüyor el kitabında, hata ayıklama içinkullanıldığını ve nesnenin renginin repr döndüğünü bildirmesi önerilir. bitiştirmek için + kaçınarak

+0

manuel Mümkünse, bu yeniden yaratmak için kullanılabilecek geçerli bir Python ifadesi gibi görünmelidir" diyor uyan değer mi Aynı değere sahip nesne (uygun bir ortam verilir). " Yani DSequence (1, 'GTTAC') gibi bir şey? –

+0

Bu iyi bir fikir, evet. –

+0

Tamam, ben de bu http://stackoverflow.com/questions/452300/python-object-reprself-should-be-an-expression için yardımınız için teşekkürler. –

1

Sadece küçük bir geliştirme:

def __str__(self): 
    return '[%s] -> [%s]' % (self.sid, self.seq) 
+0

yaptığını düşündüğün şeyi yapmaz. biçimlendirmeniz gerekiyor. – SilentGhost