python的常量_如何在Python中创建常量?

没有const关键字与其他语言一样,但是可以创建以下属性具有“getter函数”读取数据,但是无“设定函数”重写数据。这在本质上保护标识符不被更改。

下面是使用类属性的替代实现:

请注意,对于想知道常量的读者来说,这段代码并不容易。见下文解释def constant(f):

def fset(self, value):

raise TypeError

def fget(self):

return f()

return property(fget, fset)class _Const(object):

@constant

def FOO():

return 0xBAADFACE

@constant

def BAR():

return 0xDEADBEEFCONST = _Const()print CONST.FOO##3131964110CONST.FOO = 0##Traceback (most recent call last):##

...## CONST.FOO = 0##TypeError: None

代码说明:定义函数

constant它接受一个表达式,并使用它构造一个“getter”-一个只返回表达式值的函数。

setter函数引发TypeError,因此它是只读的。

使用

constant函数,我们刚刚创建了一个装饰,以快速定义只读属性。

另一种更老套的方式是:

(代码非常复杂,下面将作更详细的解释)class _Const(object):

@apply

def FOO():

def fset(self, value):

raise TypeError

def fget(self):

return 0xBAADFACE

return property(**locals())CONST = _Const()print CONST.FOO##3131964110CONST.FOO = 0##Traceback (most recent call last):##

...## CONST.FOO = 0##TypeError: None

请注意,@Apply装饰符似乎被废弃了。要定义标识符foo,Firs定义两个函数(fset,fget-名称由我选择)。

然后使用内置的

property函数来构造一个可以“设置”或“获取”的对象。

注意

property函数的前两个参数被命名为

fset和

fget.

使用以下事实:我们为自己的getter&setter选择了这些名称,并使用应用于该作用域的所有本地定义的*(双星号)创建关键字字典,将参数传递给

property功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值