Python @property 修饰器
@property 修饰器
把类的方法伪装成属性调用的方式,就是把类里面的一个函数,变成一个属性一样的东西~一开始调用类的方法要使用圆括号,现在变成了属性进行读取设置存储。举个例子来说明:
class obj:
def __init__(self,name,age):
self.__name=name
self.__age=age
# 讲这些设置成私有变量
def get_age(self):
return self.__age
def set_age(self,value):
if isinstance(value,int):
self.__age=value
else:
raise ValueError('非整数类型')
def del_age(self):
print ('delete over')
a = obj('langzi',18)
a.set_age(20)
关键字raise是用来抛出异常的,一旦抛出异常后,后续的代码将无法运行。这实际上的将不合法的输出直接拒之门外,避免黑客通过这种试探找出我们程序的运行机制,从而找出漏洞,获得非法权限。
稍稍修改下代码,使用property装饰器
class obj:
def __init__(self,name,age):
self.__name=name
self.__age=age
# 把这些设置成私有变量
@property
def age(self):
return self.__age
@age.setter
def age(self,value):
if isinstance(value,int):
self.__age=value
else:
raise ValueError('非整数类型')
@age.deleter
def age(self):
print ('delete over')
a = obj(name="qq",age=11)
print("before:",a.age) # 使用这些装饰器,可以使用类与对象的方法直接调用 : a.age
a.age = 110 # 这里就是直接使用setter把值转换
print("after:",a.age)
del a.age
更加简便的使用property()函数
class People:
def __init__(self, name, age):
self.__name = name
self.__age = age
def get_age(self):
return self.__age
def set_age(self, age):
if isinstance(age, int):
self.__age = age
else:
raise ValueError
def del_age(self):
print("删除年龄数据!")
# 核心在这句
age = property(get_age, set_age, del_age, "年龄")
obj = People("jack", 18)
print(obj.age)
obj.age = 19
print("obj.age: ", obj.age)
del obj.age
通过语句age = property(get_age, set_age, del_age, “年龄”)将一个方法伪装成为属性。其效果和装饰器的方法是一样的。
property()函数的参数:
第一个参数是方法名,调用 实例.属性 时自动执行的方法
第二个参数是方法名,调用 实例.属性 = XXX时自动执行的方法
第三个参数是方法名,调用 del 实例.属性 时自动执行的方法
第四个参数是字符串,调用 实例.属性.__doc__时的描述信息。
posted on 2021-12-28 21:09 YangShusen' 阅读(69) 评论(0) 编辑 收藏 举报