property()函数是 Python 内置函数之一,用于创建属性;它允许将方法像属性一样访问。

函数语法

property(fget=None, fset=None, fdel=None, doc=None)

参数:

  • fget:获取属性值的函数;
  • fset:设置属性值的函数;
  • fdel:删除属性的函数;
  • doc:属性的文档字符串。

property()函数返回一个属性对象,它可以被赋值给类的属性,这样访问该属性时,会自动调用fgetfsetfdel中的一个或多个函数,实现属性值的获取、设置和删除。

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)
# 实际调用了data.get_value()
print(data.x)   #输出 123
# 实际调用了data.set_value()
data.x = 1
print(data.x)   #输出 1
# 实际调用了data.del_value()
del data.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