Python property()函数
property()
函数是Python内置函数之一,用于创建属性。
property()函数语法
它的语法如下:
property(fget=None, fset=None, fdel=None, doc=None)
其中:
fget
是获取属性值的函数fset
是设置属性值的函数fdel
是删除属性的函数doc
是属性文档字符串。
property()
函数返回一个属性对象,它可以被赋值给类的属性,这样访问该属性时,会自动调用fget
、fset
和fdel
中的一个或多个函数,实现属性值的获取、设置和删除。
property()函数示例
class Data:
def __init__(self,value):
self._private_value = value
def get_value(self):
return self._private_value
def set_value(self,value):
self._private_value = value
def del_value(self):
del self._private_value
x = property(get_value,set_value,del_value,"this is a description of x")
data = Data(123)
print(data.x) #输出 123
data.x = 1
print(data.x) #输出 1
这段代码定义了一个名为Data
的类,其中包含了一个属性x
。属性x
通过property()
函数定义,它将get_value()
、set_value()
和del_value()
方法绑定到x
上,分别实现获取、设置和删除属性值的功能。
@property装饰器
@property
装饰器是一种特殊的函数,可以将方法转换成属性:
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
return self._radius
@radius.setter
def radius(self, value):
if value < 0:
raise ValueError("Radius cannot be negative")
self._radius = value
@property
def area(self):
return 3.14 * self._radius ** 2
a = Circle(5)
print(a.area) #输出 78.5
a.radius = 10
print(a.area) #输出 314.0
在上面的示例中,我们定义了一个Circle
类,其中包含一个私有变量_radius
和三个方法:radius()
,radius.setter
和area()
。在radius()
方法上使用了@property
装饰器,这意味着当我们访问radius
属性时,实际上是在调用radius()
方法并返回其结果。同样,在radius.setter
方法上使用了@radius.setter
装饰器,这意味着当我们设置radius
属性时,实际上是在调用radius.setter
方法并传递给它一个值。最后,area()
方法上使用了@property
装饰器,这意味着我们可以像访问普通属性一样访问area
属性,并且会调用area()
方法来计算面积。