|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
4. 请问以下代码会打印什么内容?
- >>> class MyDes:
- def __init__(self, value = None):
- 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
复制代码
答:如果你认为小甲鱼考的是 3 de 平方 == 9,那你就 too young too simple了!这其实是一个“陷阱”,我们先来看下会打印什么:
>>> test.x
<__main__.MyDes object at 0x1058e6f60>
复制代码
如你所见,访问实例层次上的描述符 x,只会返回描述符本身。为了让描述符能够正常工作,它们必须定义在类的层次上。如果你不这么做,那么 Python 无法自动为你调用 __get__ 和 __set__ 方法。`
以上是小甲鱼的题和答案,标红的地方是我不理解的,为什么上面代码中x就是实例层次上的描述符
我知道能得出9来的正确代码是这样,但是不明白下面的代码中x怎么就是类的层次了?
- class MyDes:
- def __init__(self, value = None):
- self.val = value
- def __get__(self, instance, owner):
- return self.val ** 2
- class Test:
- x = MyDes(3)
- test = Test()
- test.x
复制代码
|
|