Python設定常量不可修改的辦法

賞月亮曬月光發表於2020-11-21

《編寫高質量程式碼–改善python程式的91個建議》這本書,第7個建議:"將常量集中到一個檔案"時,印象深刻,覺得很有意義。推薦有機會的話閱讀下此書。

此文:Python版本為3.6.9

1.常量統一放到一個文件裡面
2.常量必須用大寫字母
3.常量在文件裡設定後不可再修改

__setattr__的參考連結:https://blog.csdn.net/sinat_24354307/article/details/109881341

步驟1:驗證階段,編寫const.py檔案和test.py檔案

const.py

import sys
class _Const(object):
    class ConstError(TypeError):
        pass

    class ConstCaseError(ConstError):
        pass

    def __setattr__(self, key, value):
        if self.__dict__.get(key) is not None:  # 判斷有沒有該常量
            raise self.ConstError('%s 常量已存在' % key)
        elif not key.isupper():   # isupper判斷常量是不是全是大寫,可包含阿拉伯數字和下劃線
            raise self.ConstCaseError('%s 常量需要全部大寫' % key)
        else:
            self.__dict__[key] = value  # 初次設定該常量時會執行這裡


sys.modules[__name__] = _Const()

test.py

import const
const.AGE = 10
print(const.AGE)
const.AGE = 10   #會報錯,常量只能設定一次,同樣的值設定2次當然也不行了。

#用小寫字母也會報錯,小編就不再試了

步驟2:實際的情況,編寫const.py指令碼,配置完所有的常量。用到的地方直接import即可,下方有舉例

const.py

import sys

class _Const(object):
    class ConstError(TypeError):
        pass

    class ConstCaseError(ConstError):
        pass

    def __setattr__(self, key, value):
        if self.__dict__.get(key) is not None:  # 判斷有沒有該常量
            raise self.ConstError('%s 常量已存在' % key)
        elif not key.isupper():   # isupper判斷常量是不是全是大寫,可包含阿拉伯數字和下劃線
            raise self.ConstCaseError('%s 常量需要全部大寫' % key)
        else:
            self.__dict__[key] = value  # 初次設定該常量時會執行這裡

sys.modules[__name__] = _Const()
import const
# 請在下方設定用到的所有常量,如果常量用小寫字母會立即報錯
const.AGE = 10
const.YEAR = 2020
const.NAME = "dachui"

測試指令碼test.py如下

import const
print(const.AGE)
const.AGE = 12       #該行會報錯

相關文章