编辑这个页面须要登录或更高权限!

Python property() 使用方法及示例

Python 内置函数

property()构造返回property属性。

property()的语法为:

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

推荐阅读: Python @property:如何使用它以及为什么?

property()参数

property()采用四个参数:

  • fget(可选) -用于获取属性值的函数。默认为None。

  • fset(可选) -用于设置属性值的函数。默认为None。

  • fdel(可选) -用于删除属性值的函数。默认为None。

  • doc(可选) -一个字符串,其中包含该属性的文档(docstring)。默认为None。

property()返回值

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

  • 如果没有给出参数,property()将返回一个基本属性,该属性不包含getter,setter或Deleter。

  • 如果未提供doc,property()则使用getter函数的docstring。

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

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

    def get_name(self):
        print('获取名字:')
        return self._name

    def set_name(self, value):
        print('将名字设置为: ' + value)
        self._name = value

    def del_name(self):
        print('删除名字')
        del self._name

    # 设置属性使用get_name,set_name
    # 和 del_name 方法
    name = property(get_name, set_name, del_name, 'Name property')

p = Person('张三')
print(p.name)
p.name = '李四'
del p.name

输出结果

获取名字:
张三
将名字设置为: 李四
删除名字

在此,_name用作存储Person名称的私有变量。

我们还设置:

  • get_name()是获取人名的获取方法,

  • 用setter方法set_name()设置人名的方法,

  • del_name()方法用来删除人的名字。

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

如程序所示,通过方法内部的打印输出,内部引用p.name调用get name()作为getter, set name()作为setter, del name()作为deleter

示例2:使用@property装饰器

property()可以使用Python装饰器 @property来分配getter,setter和Deleter,而不是使用。

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

    @property
    def name(self):
        print('获取名字:')
        return self._name

    @name.setter
    def name(self, value):
        print('设置名字为: ' + value)
        self._name = value

    @name.deleter
    def name(self):
        print('删除名字')
        del self._name

p = Person('王麻子')
print('名字为:', p.name)
p.name = '李二'
del p.name

输出结果

获取名字:
名字为: 王麻子
设置名字为: 李二
删除名字

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

首先,我们指定name()方法也是Person的属性。通过使用@property程序中所示的getter方法,可以完成此操作。

接下来,我们使用属性名称来指定设置器和删除器。

这是通过使用@name.settersetter方法和@name.deleterDeleter方法来完成的。

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

现在,无论何时使用p.name,它都会在内部调用适当的getter,setter和Deleter,如方法内部显示的打印输出所示。

Python 内置函数

Python 基础教程
Python 流程控制
Python 函数
Python 数据类型
Python 文件操作
Python 对象和类
Python 日期和时间
Python 高级知识
Python 参考手册