python中:如何使用描述符模拟属性
最近,我正在读《学习python》,在这本书中,它使用描述符来模拟属性,如下所示:python中:如何使用描述符模拟属性,python,Python,最近,我正在读《学习python》,在这本书中,它使用描述符来模拟属性,如下所示: class Property: def __init__(self, fget=None, fset=None, fdel=None, doc=None): self.fget = fget self.fset = fset self.fdel = fdel # Save unbound methods self.__doc__ = doc # or oth
class Property:
def __init__(self, fget=None, fset=None, fdel=None, doc=None):
self.fget = fget
self.fset = fset
self.fdel = fdel # Save unbound methods
self.__doc__ = doc # or other callables
def __get__(self, instance, instancetype=None):
if instance is None:
return self
if self.fget is None:
raise AttributeError("can't get attribute")
return self.fget(instance) # Pass instance to self
def __set__(self, instance, value):
if self.fset is None:
raise AttributeError("can't set attribute")
self.fset(instance, value)
def __delete__(self, instance):
if self.fdel is None:
raise AttributeError("can't delete attribute")
self.fdel(instance)
最后,它说“…我们必须用setter和deleter方法扩展我们的属性类,这将保存修饰的访问器函数并返回属性对象(self应该足够了)。由于内置属性已经这样做了,我们将在这里省略此扩展的正式编码。”
我的问题是如何实现“setter”decorator和“deleter”decorator?我不知道如何向
属性添加方法
class Property:
...
def setter(self, f):
self.fset = f
return self
def deleter(self, f):
self.fdel = f
return self
它们只需使用函数并更改属性
的相应属性。这些可以用作eg
class some_thing(object):
@Property
def some_property(self):
...
@some_property.setter
def set_some_property(self, x):
...
@some_property.deleter
def del_some_property(self):
...
在这里发布之前,可能先尝试一下。