Python 3では定数のカスタマイズを実現し,エラーを投げ出す(行ごとの詳細)

1851 ワード

様々な理由から、PythonはC/C++/Javaのようなconst修飾子を提供していない.言い換えれば、pythonには定数がない.
Pythonプログラムは一般的に約束された変数名の全大文字の形式でこれが定数であることを表すが,これは結局長続きしない.
現在python 3には本当の意味の定数はありません
pythonプロジェクトの開発では、定数をカスタマイズする必要がある場合があります.pythonで定数をカスタマイズする方法は2つあります.
1.変数名のすべてのアルファベットが大文字である、単語間が下線で接続されているなど、ネーミングスタイルによって変数が定数であることを示すが、この方法は一般的なルールにすぎず、対応する値は依然として変更可能である.
2.カスタムクラスによる定数機能
くだらないことを言わないで直接コードをつけなさい
コードはすでに行ごとに注釈して、もしまだ疑問があるならば、私と交流することを歓迎します
# -*- coding: utf-8 -*-
"""
     python 3.6.2   
csdn id : pengtaochang
email: [email protected]
      
"""
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