python 中property源代码解读
时间: 2023-09-11 12:06:01 浏览: 154
简单手势识别python源代码.zip
property是Python中一种特殊的装饰器,它能够将一个类方法转换为属性,使得类的属性能够像普通属性一样被访问,但是又可以在访问时执行一些特殊的操作。下面是property的源代码解读:
```python
class property(object):
def __init__(self, fget=None, fset=None, fdel=None, doc=None):
self.fget = fget
self.fset = fset
self.fdel = fdel
self.__doc__ = doc
def __get__(self, obj, objtype=None):
if obj is None:
return self
if self.fget is None:
raise AttributeError("unreadable attribute")
return self.fget(obj)
def __set__(self, obj, value):
if self.fset is None:
raise AttributeError("can't set attribute")
self.fset(obj, value)
def __delete__(self, obj):
if self.fdel is None:
raise AttributeError("can't delete attribute")
self.fdel(obj)
```
上述代码中,`property`类定义了三个方法`__get__`、`__set__`和`__delete__`,分别对应着属性的获取、设置和删除。在初始化时,可以传入`fget`、`fset`和`fdel`三个方法,分别对应着获取、设置和删除属性时需要执行的方法。同时,`doc`属性用于设置该属性的文档字符串。
在获取属性时,如果`obj`参数为`None`,则返回`self`,否则如果`fget`方法为`None`,则抛出`AttributeError`异常,否则调用`fget`方法获取属性值。
在设置属性时,如果`fset`方法为`None`,则抛出`AttributeError`异常,否则调用`fset`方法设置属性值。
在删除属性时,如果`fdel`方法为`None`,则抛出`AttributeError`异常,否则调用`fdel`方法删除属性。
阅读全文