2012-02-03 21 views
5

Okunacak başka bir işlevi çağırmak için __getattr__'u uyarlamam gerekir.dokümanı

Bu, help (object.attr) işlevi dışında iyi çalışır. Bu kod etkileşimli bir ortamda kullanılır, bu nedenle yardım() bizim için önemli hale gelir.

Aynı özelliklere ulaşmak için daha iyi bir tasarım var mı, ancak yardım() iyi çalışıyor.

cevap

1

"Yardım" için kullanılan metin, gerçekten bir nesnenin "__doc__" özniteliğidir. Sorun, sahip olduğunuz nesneye bağlı olarak, __doc__ özniteliğini ayarlayamazsınız. Yalnızca __getattr__ döner bir şekilde kurulu docstring'ini hae yaparsan o shure almalısınız -

sensin gerekenler ise "help(object.attr)" biraz daha kolay (ve değil help(object) size mümkün olan tüm özelliklerini gösterir) çalışmak. "O çalışmıyor" beri

Sana bu snippet'te gibi bazı işlev çağrısı iç sonuçlarını iade tahmin ediyorum:

def __getattr__(self, attr): 
    if attr == "foo": 
     #function "foo" returns an integer 
     return foo() 
    ... 

sadece kendisini fonksiyonu "foo" döneceğini, onu çağırmadan, normalde docstring görüntülenir. ne yapılabilir

dinamik olarak oluşturulan sınıf wich bir nesne olarak __getattr__ dönüş değeri sarılmasıdır uygun docstring'ini içeriyor

- yani, böyle somethong kullanmayı deneyin:

def __getattr__(self, attr): 
    if attr == "foo": 
     #function "foo" returns an (whatever object) 
     result = foo() 
     res_type = type(result) 
     wrapper_dict = res_type.__dict__.copy() 
     wrapper_dict["__doc__"] = foo.__doc__ #(or "<desired documentation for this attribute>") 
     new_type = type(res_type.__name__, (res_type,), wrapper_dict) 
     # I will leave it as an "exercise for the reader" if the 
     # constructor of the returned object can't take an object 
     # of the same instance (python native data types, like int, float, list, can) 
     new_result = new_type(result) 
    elif ...: 
     ... 
    return new_result 

Bu çalışması gerekir - olmadıkça İlk etapta hel'in neden çalışmadığına dair yanlışlarım var - eğer durum buysa, lütfen __getattr__'dan ne döndüğünüze dair bir örnek verin.

+0

Thannks, benim durumumda çalışıyor. __getattr__ içindeki tüm değerler yerel python veri türlerini döndürür. –

1

Özelliği bir özelliğe dönüştürebilirsiniz. Tesis otomatik olarak getto yönteminin dokümanını kendi başına kullanacaktır. Alternatif olarak, doc bağımsız değişkenini property()'a sağlayabilirsiniz.

+0

İçinde __getattr__, attr parametresini kullanarak bir işlev çağrısıdır. Property() ile mümkün mü? Bu attr dinamiktir, nesne oluşturulmasında bilinmemektedir. –

İlgili konular