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

  • BetterCoder

    BetterCoder

    17 Aralık 2012
  • Matt Stokes

    Matt Stokes

    22 Ocak 2008
  • MovieZoneET

    MovieZoneET

    22 Aralık 2009