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

