Python - property() 函数
property()
函数用于在 Python 类中定义属性。
Python 中的 property()
方法提供了对实例属性的接口。它封装了实例属性并提供了一个属性,与 Java 和 C# 相同。
property()
方法将 getter、setter 和 deleter 方法作为参数,并返回一个 property
类的对象。
建议使用属性装饰器而不是 property()
方法。
property(fget, fset, fdel, doc)
参数
- fget: (可选) 用于获取属性值的函数。默认值为 None。
- fset: (可选) 用于设置属性值的函数。默认值为 None。
- fdel: (可选) 用于删除属性值的函数。默认值为 None。
- doc: (可选) 包含文档的字符串。默认值为 None。
返回值
从给定的 getter、setter 和 deleter 返回属性。
以下示例演示了如何使用 property()
函数在 Python 中创建属性。
示例: property()
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()
方法,如下所示。
示例: property()
>>> from person import person >>> p1=person() >>> p1.name="Steve" setname() called >>> p1.name getname() called 'Steve'
如您所见,当我们访问 name
属性时,getname()
方法会自动调用。同样,当我们为 name
属性赋值时,setname
方法会调用。它还隐藏了实例属性 __name
。
同样,您可以为属性指定一个 deleter 方法,如下面的脚本所示。
示例: property()
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()
函数。
示例: property()
>>> from person import person >>> p1=person() >>> p1.name="Steve" setname() called >>> del p1.name delname() called
通过这种方式,我们可以使用 Python 中的 property()
函数在类中定义属性。
@property 装饰器可以轻松声明属性,而无需调用 property()
函数。接下来了解它。