Python中的描述符

在Python中,实现对象的get,set或delete方法的类称为描述符。描述符是创建属性并将托管属性添加到对象的方法。这些用于保护属性免受更改和任何修改。描述符可以提高程序的可读性和编码技巧。他们可以帮助验证数据。

例如,对于属性年龄,我们只需要正整数值,对于属性字符串,我们只需要字符串值即可,然后描述符提供了一种有效的解决方案。

要创建描述符,我们需要__get__,__set__和__delete__方法。

描述符协议

要创建描述符,我们需要描述符协议。通过定义以下方法,我们可以有效地管理属性。他们是:

    __get__(self, obj, type=None)    __set__(self, obj, value)

    __delete__(self, obj)

这里,

  • __get__:它从一个对象获取值并返回它。

  • __set__:它为对象设置一个值,但不返回任何值。

  • __delete__:删除对象中的值,不返回任何值。

这些方法通常称为getter和setter方法。Python不提供私有变量,通过使用描述符我们可以实现它们。仅具有__get__方法的描述符称为非数据描述符,它们仅针对类而不是针对实例创建。如果需要,一个类可以具有这些方法以外的其他方法。

创建和调用描述符

我们可以通过多种方式创建描述符:

  1. 创建一个类,并覆盖并使用任何__get __,__ set__和__delete__方法。

  2. 我们可以使用属性类型来创建描述符。

  3. 我们可以通过组合属性类型和python装饰器来创建描述符。

让我们来看看创建描述符的每种方式。

使用类创建描述符

class rk:

def __init__(self):

self.value=0

def __get__(self,ob, ty):

print ("get method")

return self.value

def __set__(self, ob, ty):

self.value = ty

print("set method",self.value)

def __delete__(self, ob):

print("delete method")

del self.value

class inc:

r=rk()

a=inc()print(a.r)

a.r=3

del a.r

输出结果

get method

0

set method 3

delete method

在上面的程序中,get方法将__get__值,__set__方法将值设置为attribute,__delete__方法将删除属性。

使用属性类型创建描述符

通过使用 property() 创建描述符很容易。

创建属性方法的语法为:

    property(fget=None, fset=None, fdel=None, doc=None)

这里,

  • fget:用于获取属性值的函数

  • fset:用于设置属性值的函数

  • fdel:用于删除属性的函数

  • doc:文档字符串

现在,可以使用属性类型编写相同的程序,

class rk:

def __init__(self):

self.value=0

def fget(self):

print("Get method")

return self.value

def fset(self, ty):

print ("Set method")

self.value = ty

def fdel(self):

print("delete method")

delself.value      

name = property(fget, fset, fdel, "I'm the property.")

r=rk()r.name=1

print(r.name)

del r.name

输出结果

Set method

Get method

1

delete method

使用属性类型和装饰器创建描述符

Python装饰器是用于修改函数或类的可调用对象。通过使用装饰器,我们可以修改属性方法。

使用属性类型和装饰器创建描述符的示例:

class rk(object):

def __init__(self):

self.i=0

@property

def inc(self):

print("get method")

return self.i

@inc.setter

def inc(self, ty):

self.i=ty

print ("Set method",self.i)

@inc.deleter

def inc(self):

print ("delete method")

del self.i

r=rk()print(r.inc)

r.inc=3

del r.inc

输出结果

get method

0

Set method 3

delete method

描述符的优点

描述符可以提高程序的可读性,并且可以根据我们的要求验证数据。这些是低级功能,通过使用它们,我们可以重用代码。

描述符创建了一种实现私有变量和管理数据的方法。我们可以保护属性免受任何修改和更新。

以上是 Python中的描述符 的全部内容, 来源链接: utcz.com/z/315907.html

回到顶部