python实现常量类

const 有什么好处? 最直接的好处是,防止被二次修改导致整个程序崩掉!

第一种方法, 使用enum来定义变量,防止串改.

from enum import Enum, unique # 若要不能定义相同的成员值,可以通过 unique 装饰 @unique class Const(Enum): a = 0 b = 5 c = 10 Const.a.value Const.b.value

第二种方法,自己实现一个常量类(利用单例实现)

# coding:utf-8 # Filename:test.py import sys class _const: # 实现单例 def __new__(cls, *args, **kw): if not hasattr(cls, '_instance'): orig = super(_const, cls) cls._instance = orig.__new__(cls, *args, **kw) return cls._instance class ConstError(TypeError): def __init__(self, name): self.msg = "Can't rebind or unbind const instance attribute {0}".format(name) def __str__(self): return 'error msg: {}'.format(self.msg) def __repr__(self): return self.__str__() class ConstCaseError(ConstError): def __init__(self, name): self.msg = "const name {0} is not all uppercase".format(name) def __str__(self): return 'error msg: {}'.format(self.msg) def __repr__(self): return self.__str__() def __setattr__(self, name, value): if name in self.__dict__: raise self.ConstError(name) if not name.isupper(): raise self.ConstCaseError(name) self.__dict__[name] = value def __delattr__(self, name): if name in self.__dict__: raise self.ConstError(name) raise self.ConstError(name) sys.modules[__name__] = _const() # 把Const类注册到sys.modules这个全局字典中(将系统加载的模块列表中的 test 替换为 _const() 实例)

在其他文件中定义常量:

import test test.AA = 123 # 成功 test.bb = 111 # 报错,常量名需大写 test.AA = 111 # 报错,常量不能修改 del test.AA # 报错,常量不能删除

__EOF__

本文作者amgulen
本文链接https://www.cnblogs.com/amgulen/p/16638416.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   阿木古冷  阅读(843)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示