SORU
28 Kasım 2010, Pazar


__Getattr__ arasındaki farkı anlamak ve __getattribute__

Fark başarısız olduğumu anlamaya çalışıyorum.

Yığın Taşması soruDifference between getattr vs getattributediyor

__getattribute__ gerçek niteliklerini bakmadan önce çağrılır nesne, ve bu yüzden zor olabilir doğru şekilde uygulamak. Sonun olabilir sonsuz recursions çok kolay.

Bunun ne anlama geldiğini hiçbir fikrim yok.

Sonra yazıyor ki:

Neredeyse kesinlikle __getattr__ istiyorum.

Neden?

Eğer __getattribute__ başarısız olursa, __getattr__ denir okudum. Neden iki farklı yöntem aynı şeyi yapıyorsun orada? Eğer benim kod yeni stil sınıfları uygular, ben ne yapmalıyım?

Bazı kod örnekleri bu soruya net için arıyorum. Benim yeteneğini en iyi için Google'dan araştırdım ama bulduğum cevaplar sorunu iyice tartışmak yok.

Eğer herhangi bir belge varsa, bunu okumaya hazırım.

CEVAP
28 Kasım 2010, Pazar


Bazı temel ilk:

Nesneler, özellikleri ile uğraşmak zorunda. Normalde instance.attribute yapıyoruz

Bazen daha fazla kontrol önceden öznitelik adını bilmiyoruz zaman ihtiyacımız var

instance.attribute getattr(instance, attribute_name) olacak

Bu modeli kullanarak, sağlayarak özniteliği alabilirizattrıbute_name. Bu bir dize olarak bir isim verdiğimizde çalışıyor ve örnek öznitelik adı tarafından başvurulan aramanız gerekir.

__getattr__ kullanın

Ayrıca açıkça yönetmek değil hangi nitelikleri ile başa çıkmak için nasıl bir sınıf söyleyebilirsin ve __getattr__ yöntemi ile.

Python zaten tanımlanmış olmayan bir nitelik talep ettiğinizde bu yöntemi çağırır. Ne tanımlayabilirsiniz.

Klasik bir usecase:

class A(dict):
    def __getattr__(self, name):
       return self[name]
a = A()
# Now a.somekey will give a['somekey']

__getattribute__ uyarılar ve kullanım

Eğer her öznitelik yakalamak için ihtiyacınız varsa regardless whether it exists or not yerine __getattribute__ kullanın.

Fark

__getattr__ aslında var olmayan özellikler için çağrılır. Eğer doğrudan özniteliği ayarlarsanız, bu özniteliği başvuran __getattr__ çağrılmadan almak olacaktır.

__getattribute__ Her zaman denir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ELawshea

    ELawshea

    26 Mayıs 2008
  • newreleaseblitz

    newreleasebl

    13 Ocak 2010
  • Paul Schroder

    Paul Schrode

    30 Kasım 2007