Öznitelik çağrılarıyla içerideki bir sözlüğe erişim vermesi gereken kendi kapsayıcımı yazıyorum. Kapsayıcının tipik kullanımı şu şekildedir:
dict_container = DictContainer() dict_container["foo"] = bar ... print dict_container.foo
Böyle bir şey yazmanın aptalca olabileceğini biliyorum, ancak sağlamam gereken işlevsellik bu. Bunu şu şekilde uygulamayı düşünüyordum:
def __getattribute__(self, item): try: return object.__getattribute__(item) ancak AttributeError: try: return self.dict[item] KeyError hariç: print "Nesnenin böyle bir özelliği yok"
İç içe try/except bloklarının iyi bir uygulama olup olmadığından emin değilim, bu nedenle başka bir yol < kullanmak olabilir code>hasattr() ve has_key()
:
def __getattribute__(self, item): if hasattr(self, item): nesneyi döndürür. __getattribute__(item) else: if self.dict.has_key(item): return self.dict[item] else: upgrade AttributeError("bazı özelleştirilmiş hata")
Veya birini kullanmak için bunlardan biri ve bir tanesi aşağıdaki gibi yakalama bloğunu deneyin:
def __getattribute__(self, item): if hasattr(self, item): return object.__getattribute__(item) else: deneyin: self'e dönün. KeyError hariç dict[item]: AttributeError("bazı özelleştirilmiş hata")
Hangi seçenek en çok P'dir itonik ve zarif?