说明
在 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)
输出结果:
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)
输出:
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 # 使用属性删除器删除宽度属性
输出:
<class 'int'> 4 20 6 30
标签:self,width,radius,property,age,属性 From: https://www.cnblogs.com/allenxx/p/17660396.html