2012-11-08 13 views
5

Bir python sınıfı örneğim var. Ben içine almak istemiyorum iyi nedenlerden dolayıAttributeError nesnesini, bir nesnenin belirli bir özelliğinin kullanılma girişiminde yükseltmek için maymun düzeltme eki

class Fum(object): 
    foo = Foo() 
    bar = Bar() 

fum = Fum() 

, ben maymun yama için bu nesneyi istiyorum böylece onun niteliklerinden birini yasak belli kullanım durumunda olduğunu. Ben yolda veya başka bir geliştirici yolda maymun-yamalı nesne üzerinde öznitelik kullanmaya çalışırsa, durumu açıklayan yararlı bir istisna kaldırılmasını tercih ederim. Bunu bir mülkle uygulamaya çalıştım ama şansım yok. örneğin

,

def raiser(): 
    raise AttributeError("Don't use this attribute on this object. Its disabled for X reason.") 

fum.bar = property(raiser) 

>>> fum.bar 
>>> <property object at 0xb0b8b33f> 

ben eksik?

cevap

4

Nesnelerin örneklerine doğrudan özellik gönderemezsiniz. descriptors sınıf düzeyinde bir kavramdır ve bir örneğin sınıf hiyerarşisinde olmalıdır. Bununla birlikte, çalışan bir hile vardır:

class Fum(object): 
    foo = Foo() 
    bar = Bar() 

fum = Fum() 

class DerivedFum(fum.__class__): 
    bar = property(raiser) 

fum.__class__ = DerivedFum 

fum.bar # --> raise AttributeError 
İlgili konular