在 Python 中,@property
是一个装饰器,它可以帮助我们将类的方法转换成只读属性,使用这个装饰器之后,其实就是getter,其他的对该属性的操作必须使用装饰器申明,否则报错
使用 @property
装饰器的语法如下:
class MyClass: def __init__(self): self._my_property = 0 @property def my_property(self): return self._my_property
上面代码中,@property
装饰器将 my_property()
方法转换成了 my_property
一个只读属性。通过该装饰器,我们可以在不改变代码结构的前提下,将原本需要调用方法才能获取的属性值,变为直接访问实例变量那样的方式来获取属性。
除了 getter
方法,@property
还允许我们定义setter
和 deleter
方法,它们分别在赋值时和删除属性时被调用。下面是一个完整的例子:
class MyClass: def __init__(self): self._my_property = 0 @property def my_property(self): return self._my_property @my_property.setter def my_property(self, value): self._my_property = value @my_property.deleter def my_property(self): del self._my_property
在上面的例子中,定义了一个类 MyClass
,其中包含一个名为 my_property()
的方法,该方法被装饰为一个只读属性。然后又定义了一个 setter
方法 my_property(self, value)
,用于设置属性值。此外,还定义了一个 deleter
方法 my_property(self)
,用于删除属性。
需要注意的是,在使用 @property
装饰器时有以下几个注意事项:
- 只有原方法名和对应的
setter
方法名以及deleter
方法名相同的函数,才能共享同一个名称并通过@property
装饰器实现属性方法的转换。 - 被装饰为只读属性的方法只能读取属性值,不能修改属性值。如果需要修改属性值,则需要使用
setter
方法。 - 定义
getter
、setter
和deleter
方法时,它们的形参列表都必须与待转换的方法相同,否则无法正常使用@property
装饰器进行转换。 - 如果未定义
deleter
方法,则无法删除属性,否则会报错。 @property
装饰器只能应用于新式类中。而在 Python 3中,所有类都默认为新式类,所以不需要显式地继承 object 类。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步