Tutorial Study Image

Python property()

内置函数 property() 有助于定义 Python 类属性。它提供了一个实例属性接口,并提供了与 Java 和 C# 相同的属性。


property(fget=None, fset=None, fdel=None, doc=None) #where all arguments are optional
 

property() 参数

接受四个可选参数。如果 property() 在没有任何参数的情况下调用,则返回一个基本属性。

参数 描述 必需/可选
fget 获取属性值的函数。默认为 None。 可选
fset 设置属性值的函数。默认为 None。 可选
fdel 删除属性值的函数。默认为 None。 可选
doc 一个字符串,包含属性的文档(docstring)。默认为 None。 可选

property() 返回值

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

输入 返回值
如果参数 属性

Python 中 property() 方法的示例

示例 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

注意:现在,我们通过调用 property() 方法设置了一个新的属性名称。如程序所示,通过内部调用 get_name() 作为 getter、set_name() 作为 setter 和 del_name() 作为 deleter,并通过方法内打印的输出来引用 p.name。

示例 2:使用 @property 装饰器


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