Python3 中实现常量的自定义,并抛出错误(逐行详解)

因为种种原因,Python并未提供如C/C++/Java一样的const修饰符,换言之,python中没有常量

Python程序一般通过约定俗成的变量名全大写的形式来表示这是一个常量,但是这终究不是长久之计。

目前python3依然没有真正意义的常量

在python项目开发中我们有时候会需要自定义常量,在python中自定义常量的方法有两种:

1. 通过命名风格来提示该变量为常量,如变量名所有字母大写,单词之间用下划线连接等,但这种方法只是一种约定俗成的规则,其对应的值仍然可以改变.

2. 通过自定义的类来实现常量功能

废话不多说直接上代码

代码已经逐行注解,如仍有疑问,欢迎与我交流

# -*- coding: utf-8 -*-
"""
本模块基于python 3.6.2 环境
csdn id : pengtaochang
email: pengtaochang@163.com
欢迎跟我交流
"""
class _const(object):  # 自定义一个常量类
    """自定义常量类"""
    class ConstError(BaseException) : pass   # 内部自定义修改常量值异常
    class ConstCaseError(ConstError): pass   # 内部自定义常量非大写异常
    def __setattr__(self, name, value):      # setattr 魔法方法在类属性赋值时 自动调用 可实现我们抛出异常的操作
        """ 
        name和value 在进行赋值操作,会自动传入
        name: 常量名 
        value: 常量值
        """
        if name in self.__dict__.keys():     # 判断 常量名是否存在 存在抛出异常
            raise self.ConstError("constant reassignment error!")
        if not name.isupper():               # 判断 常量名是否全为大写 非全部大写抛出异常
            raise self.ConstCaseError("const name '%s' is not all uppercase "% name)
        self.__dict__[name] = value          # 满足上述条件 进行赋值操作

import sys
sys.modules[__name__] = _const()             # 为方便模块导入 将类名绑定到本模块名上 ,导入后可直接使用 模块名 const.PI 来操作常量
代码测试

1 常量再次赋值

import const
const.PIa = 3.1415926
const.PI = 3.6   # 控制台打印:const.ConstCaseError: const name 'PIa' is not all uppercase

2 常量名非全部大写

import const
const.hhh=334      # 控制台打印:const.ConstCaseError: const name 'PIa' is not all uppercase 
到此基本实现了自定义常量的使用

END 



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值