Xüsusi bir Python sinfi üçün daha yaxşı __repr__ hansıdır?

Görünür __ repr __ funksiyasının müxtəlif yolları var qayıt.

Mənim bir sıra şeyləri saxlayan bir sinif InfoObj var, bəzilərini xüsusilə sinif istifadəçilərinin özləri tərəfindən təyin edilməsini istəmirəm. Python-da heç bir şeyin qorunmadığını tanıyıram və onlar hər halda dalışa bilər və onu qura bilərlər, ancaq __ init __ -də müəyyənləşdirməyin kiminsə onu görməsini və yalnız içəri keçməyin yaxşı olduğunu düşündüyünü düşünürəm.

(Nümunə: Obyektin tam doldurulduğunu təyin etdikdə doğrulama funksiyası ilə təyin olunan booleanslar və bunun üçün kifayət qədər məlumat saxlanıldıqda digər dəyərlərdən hesablanan dəyərlər ... məsələn A = B + C, buna görə bir dəfə A və B qoyulduqdan sonra C hesablanır və obyekt Valid = Doğru işarələnir.)

Yəni __ repr __?

    bob = InfoObj(Name="Bob")
    # Populate bob.

    # Output type A:
    bob.__repr__()
'<InfoObj object at 0x1b91ca42>'

    # Output type B:
    bob.__repr__()
'InfoObj(Name="Bob",Pants=True,A=7,B=5,C=2,Valid=True)'

    # Output type C:
    bob.__repr__()
'InfoObj.NewInfoObj(Name="Bob",Pants=True,A=7,B=5,C=2,Valid=True)'

nəticəsini dizayn etmək üçün ən yaxşı yol olan hər şeyi nəzərə alaraq ... nöqtə C tipində C ++ dilində 'özəl' təyin etdiyim bütün materialları məmnuniyyətlə qurucuya arqument kimi qəbul etməmək və sinifdən istifadə edərək komanda yoldaşlarını interfeys funksiyalarından istifadə edərək özləri üçün daha çox iş olsa belə qurmaq istərdi. Bu halda __ repr __

məqsədləri üçün müəyyən şeyləri qəbul etməyən bir konstruktoru və fərqinə görə biraz daha çətin olan ayrı bir funksiyanı təyin edərdim, əgər bu pitonu saxlamağı planlaşdırıramsa __ repr __ çıxışını istifadə edərək verilənlər bazasındakı obyektlər və eval () istifadə edərək onları əldə edin, heç olmasa daha yaxşı bir yol tapmasam. Komanda yoldaşının lazımi interfeys funksiyalarından keçmək əvəzinə əl ilə tam bir obyekt yaratmasının nəticəsi budur ki, kimsə nə etdiyini müəyyənləşdirənə qədər bir məlumat alma növü qeyri-sabit ola bilər.

8
задан Brian 15 June 2011 в 02:52
поделиться