python-class__dict__setattr__getattr__

来源:互联网 发布:美国生活水平知乎 编辑:程序博客网 时间:2024/06/04 01:05



In [153]: class test(object):     ...:     def __init__(self, a, b):     ...:         self._cont = {}     ...:         self.a = a     ...:         self.b = b     ...:         #self._cont = {}     ...:     def __setattr__(self, name, value):     ...:         print(name)     ...:         if isinstance(value, int):     ...:             self._cont[name] = value     ...:            ...:         object.__setattr__(self, name, value)     ...:         In [154]: x = test(10,20)_contabIn [155]: x.__dict__Out[155]: {'_cont': {'a': 10, 'b': 20}, 'a': 10, 'b': 20}In [156]: test.__dict__Out[156]: dict_proxy({'__dict__': <attribute '__dict__' of 'test' objects>,            '__doc__': None,            '__init__': <function __main__.__init__>,            '__module__': '__main__',            '__setattr__': <function __main__.__setattr__>,            '__weakref__': <attribute '__weakref__' of 'test' objects>})In [157]: 


In [157]: class test(object):     ...:     def __init__(self, a, b):     ...:         self._cont = {}     ...:         self.a = a     ...:         self.b = b     ...:         #self._cont = {}     ...:     def __setattr__(self, name, value):     ...:         print(name)     ...:         if isinstance(value, int):     ...:             self._cont[name] = value     ...:         else:     ...:             object.__setattr__(self, name, value)     ...:         In [158]: x = test(10,20)_contabIn [159]: x.__dict__Out[159]: {'_cont': {'a': 10, 'b': 20}}In [160]: xOut[160]: <__main__.test at 0x7f6bebac70d0>In [161]: x.c = 10cIn [162]: x.__dict__Out[162]: {'_cont': {'a': 10, 'b': 20, 'c': 10}}


In [183]: class test(object):     ...:     def __init__(self, a, b):     ...:         self._cont = {}     ...:         self.a = a     ...:         self.b = b     ...:         #self._cont = {}     ...:     def __setattr__(self, name, value):     ...:         print(name)     ...:         if isinstance(value, int):     ...:             self._cont[name] = value     ...:         else:     ...:             object.__setattr__(self, name, value)     ...:     def __getattr__(self, name):     ...:         print(name)     ...:         print self._cont[name]     ...:              ...:              ...:     In [184]: x = test(10,20)_contabIn [185]: x._contOut[185]: {'a': 10, 'b': 20}In [186]: x.aa10In [187]: x.bb20In [188]: 

原创粉丝点击