当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python property()用法及代码示例


property() 构造返回属性属性。

用法:

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

参数:

property() 采用四个可选参数:

  • fget(可选)- 获取属性值的函数。默认为None.
  • fset(可选)- 设置属性值的函数。默认为None.
  • fdel(可选)- 删除属性值的函数。默认为None.
  • 文档(可选)- 包含属性文档(文档字符串)的字符串。默认为None.

返回:

property() 从给定的 getter、setter 和 deleter 返回属性属性。

  • 如果没有给出参数,property() 返回一个不包含任何 getter、setter 或 deleter 的基本属性属性。
  • 如果文档不提供,property()获取 getter 函数的文档字符串。

示例 1:使用 getter、setter 和 deleter 创建属性

class Person:
    def __init__(self, name):
        self._name = name

    def get_name(self):
        print('Getting name')
        return self._name

    def set_name(self, value):
        print('Setting name to ' + value)
        self._name = value

    def del_name(self):
        print('Deleting name')
        del self._name

    # Set property to use get_name, set_name
    # and del_name methods
    name = property(get_name, set_name, del_name, 'Name property')

p = Person('Adam')
print(p.name)
p.name = 'John'
del p.name

输出

Getting name
The name is: Adam
Setting name to John
Deleting name

这里,_name 用作存储Person 名称的私有变量。

我们还设置了:

  • 获取人名的getter方法get_name()
  • 设置人名的设置方法set_name()
  • 删除方法del_name() 删除人名。

现在,我们通过调用property() 方法设置一个新的属性属性name

如程序所示,引用p.name在内部调用get_name()作为getter,set_name()作为setter,del_name()作为deleter,通过方法内部的打印输出。

示例 2:使用 @property 装饰器

除了使用 property() ,您可以使用 Python decorator @property 来分配 getter、setter 和 deleter。

class Person:
    def __init__(self, name):
        self._name = name

    @property
    def name(self):
        print('Getting name')
        return self._name

    @name.setter
    def name(self, value):
        print('Setting name to ' + value)
        self._name = value

    @name.deleter
    def name(self):
        print('Deleting name')
        del self._name

p = Person('Adam')
print('The name is:', p.name)
p.name = 'John'
del p.name

输出

Getting name
The name is: Adam
Setting name to John
Deleting name

在这里,我们没有使用 property() ,而是使用了 @property 装饰器。

首先,我们指定 name() 方法也是 Person 的一个属性。如程序所示,这是通过在 getter 方法之前使用 @property 来完成的。

接下来,我们使用属性名来指定setter和deleter。

这是通过将@name.setter 用于setter 方法和@name.deleter 用于deleter 方法来完成的。

注意,我们使用了相同的方法name(),但定义了不同的getter、setter和deleter。

现在,每当我们使用 p.name 时,它都会在内部调用适当的 getter、setter 和 deleter,如方法内部的打印输出所示。

相关用法


注:本文由纯净天空筛选整理自 Python property()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。