python 常量

Posted on Posted in python

> const.py

  1. class _const:  
  2.     class ConstError(TypeError): pass  
  3.   
  4.     def __setattr__(self, name, value):  
  5.         if self.__dict__.has_key(name):  
  6.             raise self.ConstError, "Can't rebind const instance attribute (%s)" % name  
  7.         self.__dict__[name] = value  
  8.     def __delattr__(self, name):  
  9.         if self.__dict__.has_key(name):  
  10.                 raise self.ConstError, "Can't unbind const const instance attribute (%s)" % name  
  11.         raise NameError, name  
  12.   
  13. import sys  
  14. sys.modules[__name__] = _const()  

> 使用

  1. (myPython) -> root@c1 ~/tmp ? # ipython  
  2. WARNING: IPython History requires SQLite, your history will not be saved  
  3. Python 2.7.10 (default, May 25 201609:38:14)   
  4. Type "copyright""credits" or "license" for more information.  
  5.   
  6. IPython 4.2.0 -- An enhanced Interactive Python.  
  7. ?         -> Introduction and overview of IPython's features.  
  8. %quickref -> Quick reference.  
  9. help      -> Python's own help system.  
  10. object?   -> Details about 'object', use 'object??' for extra details.  
  11.   
  12. In [1]: import const  
  13.   
  14. In [2]: const.v = 1  
  15.   
  16. In [3]: const.v = 2  
  17. ---------------------------------------------------------------------------  
  18. ConstError                                Traceback (most recent call last)  
  19. <ipython-input-3-8dbb5b16fe33> in <module>()  
  20. ----> 1 const.v = 2  
  21.   
  22. /root/tmp/const.py in __setattr__(self, name, value)  
  23.      12     def __setattr__(self, name, value):  
  24.      13         if self.__dict__.has_key(name):  
  25. ---> 14             raise self.ConstError, "Can't rebind const instance attribute (%s)" % name  
  26.      15         self.__dict__[name] = value  
  27.      16     def __delattr__(self, name):  
  28.   
  29. ConstError: Can't rebind const instance attribute (v)  
  30.   
  31. In [4]: print const.v  
  32. 1  
  33.   
  34. In [5]: del const.v  
  35. ---------------------------------------------------------------------------  
  36. ConstError                                Traceback (most recent call last)  
  37. <ipython-input-5-f908ce204ede> in <module>()  
  38. ----> 1 del const.v  
  39.   
  40. /root/tmp/const.py in __delattr__(self, name)  
  41.      16     def __delattr__(self, name):  
  42.      17         if self.__dict__.has_key(name):  
  43. ---> 18                 raise self.ConstError, "Can't unbind const const instance attribute (%s)" % name  
  44.      19         raise NameError, name  
  45.      20   
  46.   
  47. ConstError: Can't unbind const const instance attribute (v)  
» 转载请注明来源:若我若鱼 » python 常量

Leave a Reply

Your email address will not be published. Required fields are marked *

11 − ten =