本文共 2305 字,大约阅读时间需要 7 分钟。
property()
是 Python 内置的一个高级函数,用于创建托管属性。它允许我们将属性的访问、设置和删除操作封装到类中,通过托管属性在类外实现对这些操作的控制。
None
。None
。None
。fget
的文档字符串。property()
函数的主要作用是将类中的属性进行封装管理。通过定义 fget
、fset
和 fdel
三个方法,可以对属性的访问、设置和删除进行过滤或其他处理逻辑。
fget
函数定义的逻辑获取属性值。fset
函数定义的逻辑设置属性值。fdel
函数定义的逻辑删除属性值。class C: def __init__(self): self._x = None # 初始化隐藏属性 def getx(self): # 获取x的值 return self._x def setx(self, value): # 设置x的值 self._x = value def delx(self): # 删除x的值 del self._x print("已删除 _x") # 创建托管属性 x x = property(getx, setx, delx, 'x 是一个托管属性')c = C() # 创建实例对象# 通过实例对象设置托管属性 xc.x = "Property"# 调用 getx() 获取 x 的值print(c.x) # 输出 "Property"# 调用 __doc__ 查看托管属性的文档print(C.x.__doc__) # 输出 "x 是一个托管属性"# 删除托管属性 xdel c.x # 调用 delx() 方法
Property已删除 _x
@property
是一个装饰器,用于将方法转换为属性。通过使用 @property
装饰器,可以将类中的方法转化为属性,从而在类外通过属性访问、设置和删除这些逻辑。
class A: def __init__(self): self.score = 85 # 初始化分数 def get_score(self): # 获取分数 if self.score < 60: return "不及格!" else: return self.score def set_score(self, value): # 设置分数 if 0 <= value <= 100: self.score = value else: print(f"输入的值 {value} 超出范围0~100!") def del_score(self): # 删除分数 del self.score print("已删除 score 的值") score_x = property( fget=get_score, fset=set_score, fdel=del_score, doc="score_x 是 score 的托管属性" )a = A()# 通过实例对象设置托管属性 score_xa.score_x = 45# 调用 get_score() 获取 score_x 的值print(a.score_x) # 输出 "不及格!"# 删除托管属性 score_xdel a.score_x
不及格!已删除 score 的值
@property
装饰器的本质是将装饰的方法转换为一个托管属性。装饰后的属性具备 fget
、fset
和 fdel
三个属性,分别对应原方法的逻辑。要想实现属性的设置和删除操作,可以通过定义 @property.setter
和 @property.deleter
装饰器来添加对应的 setter 和 deleter 方法。
@property
、@score_x.setter
、@score_x.deleter
装饰的方法名必须一致,否则会导致错误。@property
装饰的属性默认是只读属性,无法通过赋值操作修改其值。通过 property()
函数和 @property
装饰器,我们可以对类中的属性进行统一管理和封装,从而在类外以简洁的方式实现属性的访问、设置和删除,同时在类中对这些操作进行定制化处理。
转载地址:http://uzgfk.baihongyu.com/