Değiştirmek yerine __str __ () öğesini genişletme

Nesnemin __ str __() yöntemini genişletmek istiyorum. str (obj) şu anda şunu okur:


Adresi benzersiz bir tanımlayıcı olarak beğeniyorum, ancak bazı özellikler eklemek istiyorum. Adres bölümünü hala muhafaza ederken bunu genişletmenin en iyi yolu nedir? Böyle bir şeye bakmak istiyorum:


Adresi saklayan bir özellik görmüyorum. Python 2.4.3 kullanıyorum.

Edit: Would be nice to know how to do this with __repr__()

Solution (for python 2.4.3):

def __repr__(self):
    return "
1
Her şeyden önce, böyle eski bir python sürümü kullanmayın. Bunun yanı sıra, yapmaya çalıştığınız şey için __ repr __ .
katma yazar ThiefMaster, kaynak

2 cevap

Adresi id (obj) ile alabilirsiniz. Muhtemelen __ str __() yerine __ repr __() metodunu değiştirmek istersiniz. İşte Python 2.6 + 'da bunu yapacak kod:

class Test(object):
    def __repr__(self):
        repr_template = ("<{0.__class__.__module__}.{0.__class__.__name__}"
                         " object at {1}: name={0.name}, isValid={0.isValid}>")

        return repr_template.format(self, hex(id(self)))

Ölçek ile:

test = Test()
test.name = "foo"
test.isValid = True
print repr(test)
print str(test)
print test

Python'un eski bir sürümünde, str.format() sözdizimi yerine "% s" gibi dize biçimlendirme işlemlerini kullanarak aynı tür bir işlemi kolayca yapabilirsiniz. str.format() 'ı kullanacaksanız, şablonda {1: #x} kullanarak yerleşik hex formatlama özelliğini de kullanabilir ve onaltılık (id (self)) değişkeninden id (self) 'a kadar argüman 1.

5
katma
Tam bir cevaba sahip olmak için düzenlenmiştir.
katma yazar Michael Hoffman, kaynak
Geri kalanlardan ne haber? Ben class ___ ________ __ __ __ __ ____________________ __ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Test, ama modül adı ne hakkında?
katma yazar shadowland, kaynak
Bu yaptı. Ben sadece% s'i önerdiğin gibi kullanmalıydım.
katma yazar shadowland, kaynak
class Mine(object):
    def __str__(self):
        return object.__str__(self) + " own attributes..."
1
katma
Bu arzu ettiği çıktıyı üretmeyecek. Her şeyin kendi örneğinde köşeli parantez içinde olmasını istiyor. Bu, kendi köşeli parantezler kümesindeki orijinali geri döndürecek ve niteliklerini "dışına" ekleyecektir.
katma yazar Brandon Buck, kaynak