属性の設定を制限
どうもここら辺の知識がないので理解できてないっぽい。
http://www.python.jp/doc/release/ref/datamodel.html
こっちも見て勉強しとこう。
def no_new_attributes(wrapped_setattr): """ 新しい属性を追加しようとするとエラーを吐くが、 既存の属性に新しい値をセットすることは許す """ def __setattr__(self,name,value): if hasattr(self,name): # 新規属性ではない。セット許可 wrapped_setattr(self,name,value) else: raise(AttributeError("Cant add attribute %r to %s" % (name,self))) # 関数の中で定義した関数を戻す事によってカスタムメタクラスを実現している return __setattr__ class NoNewAttrs(object): """NoNewAttrsのサブクラスは、新たな属性の追加を阻害するが、 既存の属性に新しい値をセットすることを許す。 """ # このクラスのインスタンスへの新しい属性の追加をブロックする # ?1 __setattr__ = no_new_attributes(object.__setattr__) # ?2 class __metaclass__(type): " simple custom metaclass to block adding new attributes to this class" __setattr__ = no_new_attributes(type.__setattr__) # ?1:何故引数にobject.__setattr__を入れて上手く動くのか良くわからない。 # ?2:何のためにあるの?