@property装饰器的个人想法

今天发现了一个在python中用来使变量转变为常量的装饰器,下面我展示下实现这个功能代码。

class MyMath(object):

	def __init__(self):
		self.__PI = "3.1415926"

	@property
	def PI(self):
		return self.__PI
math = MyMath()
print(math.PI)  # 常量这个不能让别人修改的值

一般我们要想外部不能访问,都会给属性加上私有属性,只能够访问到,但不能被修改,这就是常量。现在我们在方法上面添加了一个装饰器@property,再把math.PI()的括号去掉,就变成了一种特殊的调用手段,只要用了这个调用手段,用了函数就不需要写括号了。这个也就是常量了。

class MyMath(object):
	def __init__(self):
		self.__PI = 3.1415926

	@property
	def PI(self):
		return self.__PI

	@PI.setter
	def set_pi(self, new_pi):
		self.__PI = new_pi

	@PI.deleter
	def del_pi(self):
		print("del")
		del self.__PI


math = MyMath()
print(math.PI)  # 常量这个不能让别人修改的值

# math.set_pi(3.1415926535)

math.set_pi = 3.141592653523

del math.del_pi

print(math.PI)
下面在让我们来看看这段代码中改PI函数的属性,这里用到的是在方法上加一个属性@PI.setter,之后调用函数就可以直接赋值,而不用加括号了。但是要具体的改函数的值还要靠self.__PI = new_pi 这句代码去修改。以此类推,@PI.deleter就是删除

属性了。

       再让我们来看看@property的另一种实现方式:

class MyMath(object):
	def __init__(self):
		self.__PI = 3.1415926
		self.name = "oldyang"

	def get_PI(self):
		return self.__PI

	def set_PI(self, new_pi):
		self.__PI = new_pi

	def del_PI(self):
		print("del")
		del self.__PI

	PI = property(get_PI, set_PI, del_PI)  # 这个就是使用Property类去替换我们的@property


math = MyMath()
print(math.PI)  # 常量这个不能让别人修改的值

# math.set_pi(3.1415926535)

math.PI = 3.141592653523

del math.PI

print(math.PI)
这就是将上面的装饰器替换成property类的方式。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值