如何给python中设定常量

Python015

如何给python中设定常量,第1张

"""

              首先声明:python没有真正意义上的常量

但我们可以通过私有属性以及property属性相结合,自己设置出属于python的伪常量。

当然,这个常量其实也是可以改的,不过是比较麻烦,平常可以当作一个常量用

"""

#1.先是用私有属性初始化一个量

class Man(object):

     def __init__(self,age):

          self.__age=age

#2.然后用property获取到

     @property

     def AGE(self):

          return self.__age

#3.最后得到常量man.AGE,设置的常量,因property属性,所以调用不需要括号

man = Man(300)

print(man.AGE)

#4.现在验证,输入以下代码,结果为"AttributeError: can't set attribute"

man.AGE=33

#5.这就是python简单的设置伪常量!

一、访问字典的元素使用dobj.get(key, somethingelse),如果对应key值元素不存在,你将会得到somethingelse值,例如“not found”不要使用dobj[key],因为如果key对应元素不存在,则会产生KeyError异常,这样必须使用try...except来封装二、名字空间中的属性可以通过字典__dict__来访问__setattr__负责处理属性赋值,其内进行赋值时要使用self.__dict__[attr] = value以防止递归三、sys.modules是一个字典,它包含了从Python开始运行起,被导入的所有模块。键字就是模块名,键值就是模块对象。请注意除了你的程序导入的模块外还有其它模块。Python在启动时预先装入了一些模块,如果你在一个Python IDE环境下,sys.modules包含了你在IDE中运行的所有程序所导入的所有模块定义class _const(object):class ConstError(TypeError): passdef __setattr__(self, name, value):if self.__dict__.has_key(name):raise self.ConstError, "Cant rebind const(%s)" % nameself.__dict__[name] = valuedef __delattr__(self, name):if name in self.__dict__:raise self.ConstError, "Cant unbind const(%s)" % nameraise NameError, nameimport syssys.modules[__name__] = _const()使用import constconst.value = somevalueconst.value = newvalue # 产生异常const.ConstError技巧1、使用__setattr__来控制重新绑定2、sys.modules[name]得到的是模块对象,通过模块对象可以访问其模块属性;而Python不会进行严格的类型检测,所以直接将一个 _const类对象加入sys.modules字典,而__name__的值为对应模块const的名字const,通过 sys.modules[__name__] = _const()用类对象替换模块对象,将对应的名字空间加以限制,当使用import const时,会发生sys.modules[const] = _const();而访问const.attrvalue时会发生sys.modules[const].attrvalue,即 _const().attrvalue