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