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

  • Droid Life

    Droid Life

    17 Kasım 2009
  • Hollyscoop

    Hollyscoop

    30 Ocak 2007
  • Videogamerz | Call of Duty

    Videogamerz

    5 NİSAN 2012