波大大12138 发表于 2020-6-27 10:47:53

这一题答案为啥不是9答案解析没看懂

>>> 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
如你所见,访问实例层次上的描述符 x,只会返回描述符本身。为了让描述符能够正常工作,它们必须定义在类的层次上。如果你不这么做,那么 Python 无法自动为你调用 __get__ 和 __set__ 方法。
能解释一下这是什么意思吗?答案为什么不是9

Twilight6 发表于 2020-6-27 11:37:19



如你所见,访问实例层次上的描述符 x,只会返回描述符本身。为了让描述符能够正常工作,它们必须定义在类的层次上。

关键字是这些,这个是个知识点,你记住就好,不必深究,代码中的 Test 类:
class Test:
    def __init__(self):
      self.x = MyDes(3)
访问描述符时候是属于实例属性的 x ,而访问实例属性的 x 只会返回描述符本身(类中在方法内的带 self. 的属性就是实例属性,属于实例层次)

而我们要怎么办定义成类层次呢?这样即可:
class Test:
    x = MyDes(3)
在方法外直接访问描述符,将结果返回给类属性 ,这样就是定义在 类的层次上,返回的结果就为 9(类中方法外的属性叫 类属性,属于类层次)


heidern0612 发表于 2020-6-27 11:49:01

它们必须定义在类的层次上....

你都写明白了,还问为啥,这句话可不是闹着玩呢..

小甲鱼的铁粉 发表于 2020-6-27 11:54:47

类好难
页: [1]
查看完整版本: 这一题答案为啥不是9答案解析没看懂