property 属性
1.创建进程2.Process类语法详解3.进程间通信4.进程池5.进程间的锁和信号量6.根据进程编号杀死指定进程os.kill7.守护进程8.线程9.实现多线程多任务的步骤10.threading.Thread类详解11.守护线程&&threading.enumerate()12.python线程并行执行与java的线程并行执行的对比13.IO密集型任务与CPU密集型任务14.多线程共享全局变量的问题15.多线程共享资源之竞态条件16.互斥锁17.死锁18.线程池19.进程与线程的对比20.闭包21.闭包之nonlocal关键字的作用22.闭包之作用23.闭包之可能引起的问题24.弱引用25.装饰器26.装饰器示例
27.property 属性
28.with语句和上下文管理器详解、最佳实践、示例29.生成器30.深浅拷贝31.正则表达式说明
在 Python 中,property
属性是一种特殊的属性,它允许你在访问和设置对象的属性时执行自定义的操作。property
属性用于将方法转化为属性,从而在外部代码中可以像访问普通属性一样访问这些方法。它是一种实现封装和控制属性访问的强大工具。
property
属性的主要目的是提供一种更加灵活和可控的方式来处理类的属性,它能够让你定义在属性被读取、设置或删除时需要执行的逻辑,从而实现属性访问的各种行为。
property
属性通常由以下几个部分组成:
-
getter 方法:用于获取属性值。这个方法在你访问属性时被调用。
-
setter 方法:用于设置属性值。这个方法在你给属性赋值时被调用。
-
deleter 方法:用于删除属性。这个方法在你使用
del
语句删除属性时被调用。
通过定义这些方法,你可以控制对属性的访问、修改和删除,从而实现数据的封装和更复杂的操作。
说白了就是把方法装饰成属性。使用方式与使用属性一样。这在封装数据、控制访问权限以及动态计算属性时非常有用。
分类
property
的定义方式有两种:使用装饰器和经典的 getter、setter、deleter 方法。
示例
1. 没有使用property属性的样子
1 class Person(object): 2 def __init__(self): 3 self.__age = 0 4 5 # 获取属性 6 def get_age(self): 7 return self.__age 8 9 # 修改属性 10 def set_age(self, new_age): 11 self.__age = new_age 12 13 14 # 方式1: 正常的对象调用方法即没有使用property属性 15 p = Person() 16 age = p.get_age() 17 print(age) 18 p.set_age(10) 19 age = p.get_age() 20 print(age)
输出结果:
1 2 | 0 10 |
2. 使用装饰器方式
1 ''' 2 在Python中,可以使用两种方式来定义类的属性:使用装饰器和使用经典的getter、setter、deleter方法。这两种方式都可以用来在类中实现属性的访问控制和操作。 3 1. 使用装饰器方式定义属性: 4 Python引入了property装饰器,它允许你将一个方法标记为属性,并在访问属性时自动调用该方法。property装饰器可以用来创建只读、只写或读写属性 5 2. 使用经典的 getter、setter、deleter 方法方式定义属性: 6 在Python中,你也可以使用经典的getter、setter和deleter方法来定义属性,这种方式更加灵活,允许你在属性访问、设置和删除时执行自定义操作。 7 ''' 8 9 class Circle: 10 def __init__(self, radius): 11 self._radius = radius 12 13 @property # 使用装饰器方式,让radius方法像属性一样使用,属性名为radius。 读 14 def radius(self): 15 return self._radius 16 17 @radius.setter # @方法名.setter,把此方法当属性使用,为其赋值时,自动执行此方法。 写 18 def radius(self, value): 19 if value >= 0: 20 self._radius = value 21 else: 22 raise ValueError("Radius cannot be negative.") 23 24 @property 25 def area(self): # 只为此属性,设置了读,无写 26 return 3.14159 * self._radius ** 2 27 28 29 circle = Circle(5) 30 print(circle.radius) # 使用属性访问器获取半径 31 print(circle.area) # 自动计算面积 32 circle.radius = 7 # 使用属性设置器设置半径 33 print(circle.radius) 34 print(circle.area)
输出:
1 2 3 4 | 5 78.53975 7 153.93791 |
把类中的方法像属性一样使用。
3. 经典的 getter、setter、deleter 方法
''' 在Python中,可以使用两种方式来定义类的属性:使用装饰器和使用经典的getter、setter、deleter方法。这两种方式都可以用来在类中实现属性的访问控制和操作。 1. 使用装饰器方式定义属性: Python引入了property装饰器,它允许你将一个方法标记为属性,并在访问属性时自动调用该方法。property装饰器可以用来创建只读、只写或读写属性 2. 使用经典的 getter、setter、deleter 方法方式定义属性: 在Python中,你也可以使用经典的getter、setter和deleter方法来定义属性,这种方式更加灵活,允许你在属性访问、设置和删除时执行自定义操作。 ''' class Rectangle: def __init__(self, width, height): self._width = width self._height = height def get_width(self): # 经典的getter方法 return self._width def set_width(self, value): # 经典的setter方法 if value >= 0: self._width = value else: raise ValueError("Width cannot be negative.") def del_width(self): # 经典的deleter方法 del self._width width = property(get_width, set_width, del_width) # property属性装饰一下 @property def area(self): return self._width * self._height rectangle = Rectangle(4, 5) print(type(rectangle.width)) # <class 'int'> print(rectangle.width) # 使用属性访问器获取宽度 print(rectangle.area) rectangle.width = 6 # 使用属性设置器设置宽度 print(rectangle.width) print(rectangle.area) del rectangle.width # 使用属性删除器删除宽度属性
输出:
1 2 3 4 5 | < class 'int' > 4 20 6 30 |
width在访问、修改、删除/del 操作时自动调用相应的方法。
如何使用类属性的方式定义property属性?
1. 初始化方法init中定义一个私有属性
2. 定义一个设置私有属性的方法
3. 定义一个获取私有属性的方法
4. 定义类属性: 类属性 = property(获取值方法, 设置值方法
合集:
python高级
标签:
property属性
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能