SORU
8 Mart 2010, PAZARTESİ


Nasıl varsayılan davranışı bozmadan Python in __getattr__ tutacağım?

Güzel birşeyler yapmak için bir sınıf __getattr__ yöntemi geçersiz kılmak istiyorum ama varsayılan davranışı kırmak istemiyorum.

Bunu yapmak için doğru yolu nedir?

CEVAP
8 Mart 2010, PAZARTESİ


__getattr__ geçersiz olursa adını eşleşen örnek öznitelikleri eğer orada hiçbir sorun -- __getattr__ sadece son çare olarak adlandırılır, yani olmalıdır. foo.bar, erişim örneğin, __getattr__ foo nitelik bar adı varsa adı verilecek. Eğer öznitelik işlemek istemiyorum, AttributeError zam:

class Foo(object):
    def __getattr__(self, name):
        if some_predicate(name):
            # ...
        else:
            # Default behaviour
            raise AttributeError

__getattr__, __getattribute__ ilk adı verilecek aksine ancak, (yeni stil sınıflar için nesne devralan bu sadece çalışır yani). Bu durumda, varsayılan davranış gibi çok koruyabilirsiniz:

class Foo(object):
    def __getattribute__(self, name):
        if some_predicate(name):
            # ...
        else:
            # Default behaviour
            return object.__getattribute__(self, name)

the Python docs for more bkz.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Fubar Protocol

    Fubar Protoc

    21 AĞUSTOS 2010
  • Mr_BrettHooge

    Mr_BrettHoog

    3 Ocak 2011
  • Yo Mama

    Yo Mama

    18 EYLÜL 2005