变量的封装只有在有逻辑限制的情况下使用。
@property#创建property对象,只负责拦截读取操作
@方法名.setter#只负责拦截写入操作
属性:@property
公开实例变量,缺少逻辑验证,私有的变量与两个公开的方法相结合,又使调用又使操作者略显复杂,而属性会使两个方法的使用方式象操作变量一样方便
定义:
@property#创建property对象,只负责拦截读取操作
def lia(self):
return self.__lia
@lia.setter#只负责拦截写入操作
def lia(self,value):
if 10<=value<=80:
self.__lia=value
调用; 对象.属性名=数据
变量=对象.属性名
作用:通常两个公开的属性,保护一个私有变量。(也就是读用@property,写用变量名,setter保护)
只写:变量名=property(None,写入方法名)
如:lia = property(None, set_lia)#只能写不有读
注意:此方法的方法名必须与变量同名。
#####################################################################
例如:下面是创建一个人,有姓名,年龄和体重,但要限制其年齝和体重的读写。
class Diren:
def __init__(self,name,lia,gj):
self.name=name
self.lia=lia
self.gj=gj
@property#创建property对象,只负责拦截读取操作
def lia(self):
return self.__lia
@property
def gj(self):
return self.__gj
@lia.setter#只负责拦截写入操作
def lia(self,value):
if 10<=value<=80:
self.__lia=value
else:
raise EOFError("超出范围")
@gj.setter
def gj(self,value):
if 30<=value<=50:
self.__gj=value
raise EOFError("超出范围")
dr=Diren("小辣椒",20,45)
dr.lia=35
print(dr.lia)
dr.gj=30
print(dr.gj)
留言与评论(共有 0 条评论) “” |