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

  • aki6336

    aki6336

    14 AĞUSTOS 2008
  • Codecourse

    Codecourse

    3 ŞUBAT 2009
  • Creavite

    Creavite

    8 Mart 2009