如下所示,如果我们用下面的方法定义一个类:
class MyDes:
def __init__(self, value = 3):
self.val = value
def __get__(self, instance, owner):
return self.val**2
实现如下:
>>> class Test:
def __init__(self):
self.x = MyDes(3)
>>> test = Test()
>>> test.x
输出结果是:
<main.MyDes object at 0x1058e6f60>
显然,没有调用MyDes的get方法,那么这是为什么呢?
如你所见,访问实例层次上的描述符 x,只会返回描述符本身。为了让描述符能够正常工作,它们必须定义在类的层次上。如果你不这么做,那么 Python 无法自动为你调用 _ get_ 和 _ set_ 方法。
我们应该这样修改:
class Test:
x = MyDes(3)
直接定义类属性为实例对象,这样就可以正常显示了。