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__方法的描述符称为非数据描述符,它们仅针对类而不是针对实例创建。如果需要,一个类可以具有这些方法以外的其他方法。
创建和调用描述符
我们可以通过多种方式创建描述符:
创建一个类,并覆盖并使用任何__get __,__ set__和__delete__方法。
我们可以使用属性类型来创建描述符。
我们可以通过组合属性类型和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 method0
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 methodGet 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 method0
Set method 3
delete method
描述符的优点
描述符可以提高程序的可读性,并且可以根据我们的要求验证数据。这些是低级功能,通过使用它们,我们可以重用代码。
描述符创建了一种实现私有变量和管理数据的方法。我们可以保护属性免受任何修改和更新。
以上是 Python中的描述符 的全部内容, 来源链接: utcz.com/z/315907.html