@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类的方式。


猜你喜欢

转载自blog.csdn.net/weixin_40036888/article/details/80261492
今日推荐