Python property()
时间:2020-02-23 14:43:11 来源:igfitidea点击:
Python property()函数返回一个property属性。
它主要用于创建可管理的类属性。
Python属性()
Python property()函数语法为:
class property(fget=None, fset=None, fdel=None, doc=None)
- fget:获取属性值的函数
- fset:设置属性值的函数
- fdel:删除属性的函数
- doc:为将在help()函数中使用的属性创建docstring。
让我们看一个在类中创建属性属性的示例。
class Person: def __init__(self): self._name = None def get_name(self): print('get_name called') return self._name def set_name(self, i): print('set_name called') self._name = i def del_name(self): print('del_name called') del self._name name = property(get_name, set_name, del_name, "Person's Name Attribute") d = Person() d.name = 'hyman' print(d.name) del d.name
输出:
set_name called get_name called hyman del_name called
请注意,"人名"属性是通过指定的方法进行管理的,并且使用的是"人"的" _name"私有属性。
我们可以使用属性函数创建只读属性或者不可删除属性。
如果我们将属性函数定义为:
name = property(get_name, set_name, None)
然后," del d.name"将引发异常,原因是" AttributeError:无法删除属性"。
同样,如果我们将property属性定义为:
name = property(get_name, None, None)
该名称将是只读的。
如果我们尝试使用d.name ='hyman'设置其值,则会抛出异常,提示为" AttributeError:无法设置属性"。
Python属性装饰器
我们可以使用@property装饰器来实现相同的目的。
class Data: def __init__(self): self._id = None @property def id(self): print('id getter') return self._id @id.setter def id(self, i): print('id setter') self._id = i @id.deleter def id(self): print('id deleter') del self._id d = Data() d.id = 100 print(d.id) del d.id
输出:
id setter id getter 100 id deleter