Python - property() 函数

2023-09-17 22:26:52

property()函数用于定义 Python 类中的属性。

Python 中的 property() 方法为实例属性提供了一个接口。 它封装实例属性并提供属性,与 Java 和 C# 相同。

property() 方法将 get、set 和 delete 方法作为参数,并返回 property 类的对象。

建议使用 property decorator 而不是 property() 方法。

property(fget, fset, fdel, doc)

参数:

  1. fget:(可选)用于获取属性值的函数。默认值为无。
  2. fset:(可选)用于设置属性值的函数。默认值为无。
  3. fdel:(可选)用于删除属性值的函数。默认值为无。
  4. doc:(可选)包含文档的字符串。默认值为无。

返回值:

返回给定的 getter、setter 和 deleter 的属性属性。

下面的示例演示如何使用 property() 函数在 Python 中创建属性。

class person:
    def __init__(self):
        self.__name=''
    def setname(self, name):
        print('setname() called')
        self.__name=name
    def getname(self):
        print('getname() called')
        return self.__name
    name=property(getname, setname)

在上面的示例中,property(getname, setname)返回属性对象并将其分配给name 。 因此,name属性隐藏私有实例属性__name。 直接访问 name 属性,但在内部它将调用 getname()setname() 方法,如下所示。

>>> from person import person
>>> p1=person()
>>> p1.name="Steve"
setname() called
>>> p1.name
getname() called
'Steve'

正如你在上面看到的,当我们访问 name 属性时,会自动调用 getname() 方法。 同样,当我们为 name 属性分配值时,会调用 setname 方法。 它还隐藏实例属性 __name

同样,您可以为属性指定删除器方法,如下面的脚本所示。

class person:
    def __init__(self, name):
        self.__name=name
    def setname(self, name):
        print('setname() called')
        self.__name=name
    def getname(self):
        print('getname() called')
        return self.__name
    def delname(self):
        print('delname() called')
        del self.__name
    # Set property to use get_name, set_name
    # and del_name methods
    name=property(getname, setname, delname)

删除 name 属性时将调用 delname() 函数。

>>> from person import person
>>> p1=person()
>>> p1.name="Steve"
setname() called
>>> del p1.name
delname() called

这样,我们就可以使用 Python 中的 property() 函数在类中定义一个属性。

@property装饰器使声明属性变得容易,而不是调用property()函数。接下来了解它。