O'zgartirish o'rniga __str __ () ni kengaytirish

Ob'ektim __ str __() usulini kengaytirishni xohlayman. str (obj) hozirda quyidagicha o'qiydi:


Manzilni noyob identifikator sifatida ko'raman, lekin ba'zi xususiyatlarni qo'shishni xohlayman. Unda manzil qismini saqlab turishda buni kengaytirishning eng yaxshi yo'li qanday? Men shunga o'xshash narsalarni ko'rmoqchiman:


Manzilni saqlaydigan har qanday xususiyatni ko'rmayapman. Men python 2.4.3 dan foydalanmoqdaman.

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

Solution (for python 2.4.3):

def __repr__(self):
    return "
1
Avvalo, bunday eskirgan python versiyasini ishlatmang. Bundan tashqari, nima qilishni istayotganingiz uchun __ repr __ .
qo'shib qo'ydi muallif ThiefMaster, manba

2 javoblar

Manzilni id (obj) bilan olishingiz mumkin. Ehtimol __ str __() o'rniga __ repr __() usulini o'zgartirishni xohlaysiz. Python 2.6+ da buni amalga oshiradigan 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)))

Viktorina bilan:

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

str.format() sintaksisi o'rniga "% s" kabi mag'lubiyatga formatlash operatsiyalarini ishlatib, Pythonning eski versiyasida bir xil narsalarni osonlik bilan bajarishingiz mumkin. Agar siz str.format() dan foydalanmoqchi bo'lsangiz, shablonda {1: #x} dan foydalanib, o'rnatilgan hex formatlash xususiyatidan foydalanishingiz va o'zgartirishingiz mumkin hex (id (self)) dan oddiygina id (self) ga 1 argument 1ni kiriting.

5
qo'shib qo'ydi
To'liq javob berish uchun tuzilgan.
qo'shib qo'ydi muallif Michael Hoffman, manba
Qolganlari haqida nima deyish mumkin? Obj .___ sinfi ______ nomi bilan viktorina qaytadi, lekin modulning nomi nima bo'ladi?
qo'shib qo'ydi muallif shadowland, manba
Buni qildi. Men taklif qilayotganingizdagina% sdan foydalanmoqchiman.
qo'shib qo'ydi muallif shadowland, manba
class Mine(object):
    def __str__(self):
        return object.__str__(self) + " own attributes..."
1
qo'shib qo'ydi
Bu xohlagan mahsulotni ishlab chiqarmaydi. U hammasini uning misolida burchakli qavatlar ichida bo'lishini xohlaydi. Bu o'z burchakka burchaklaridagi asl nusxasini qaytarib beradi va ularning "tashqi" xususiyatlarini qo'shadi.
qo'shib qo'ydi muallif Brandon Buck, manba
Python
Python
372 ishtirokchilar

Bu guruh python dasturlash tilini muhokama qilish uchun. Iltimos, o'zingizni hurmat qiling va faqat dasturlash bo'yicha yozing. Botlar mavzusini @botlarhaqida guruhida muhokama qling! FAQ: @PyFAQ Offtopic: @python_uz_offtopic

Python offtopic group !
Python offtopic group !
150 ishtirokchilar

@python_uz gruppasining offtop gruppasi. offtop bo'lsa ham reklama mumkin emas ) Boshqa dasturlash tiliga oid gruppalar @languages_programming