起步
property
是 Python 内置的功能,常用来修饰类方法,用于已访问属性的方式调用函数。
class C(object):
def __init__(self):
self._x = 'Tom'
@property
def x(self):
return self._x
@x.setter
def x(self, value):
self._x = value
c = C()
print(c.x) # Tom
c.x = 'Tony'
print(c.x) # Tony
尽管 property
的实现是 C 实现,但仍不妨碍探究它的实现原理,本文最后也会给出它的纯 Python 版本的实现。
描述符对象
为了能够实现访问属性就调用某个函数,这里将利用 描述符对象 作为本文的实现起点,当某个类定义了 __get__
方法后,通过其方法名称可以直接调用 __get__
,例如:
class Desc: