pythonで_setattr__, __getattr__, __delattr__, __call__

995 ワード

Pythonには興味深い文法があり、タイプを定義するときにcall関数を実現すれば、このタイプは呼び出すことができます.すなわち,このクラスのオブジェクトを関数として用いることができ,括弧演算子を再ロードすることに相当する.setattr,getattr,delattrは操作オブジェクト属性の呼び出しである
class storage(dict):
#    __setattr__, __getattr__, __delattr__
#    dict,    “.”  
    def __setattr__(self, key, value):
        self[key] = value
    def __getattr__ (self, key):
        try:
            return self[key]
        except KeyError, k:
            return None
    def __delattr__ (self, key):
        try:
            del self[key]
        except KeyError, k:
            return None

    # __call__           
    #  ()     
    def __call__ (self, key):
        try:
            return self[key]
        except KeyError, k:
            return None

s = storage()
s.name = "hello"#  __setattr__    
print s("name")#  __call__    
print s["name"]#dict    
print s.name#  __getattr__    
del s.name#  __delattr__    
print s("name")
print s["name"]
print s.name