小甲鱼的铁粉 发表于 2020-6-27 15:34:43

python46讲魔法方法,描述符

题目是:请问以下代码,分别调用 test.a 和 test.x,哪个会打印“getting…”?
这里面的instance是干嘛的,感觉他没有什么用,不要她可以吗

>>> class MyDes:
      def __get__(self, instance, owner):
                print("getting...")

>>> class Test:
      a = MyDes()
      x = a

>>> test = Test()

小甲鱼的铁粉 发表于 2020-6-27 15:35:44

class MyDes:
    def __init__(self, value = None):
      self.val = value

    def __get__(self, instance, owner):
      return self.val - 20

    def __set__(self, instance, value):
      self.val = value + 10
      print(self.val)

class C:
    x = MyDes()

if __name__ == '__main__':# 该模块被执行的话,执行下边语句。
    c = C()
    c.x = 10
    print(c.x)
这个也有instance,好迷呀{:10_257:}

xiaosi4081 发表于 2020-6-27 15:37:18

python中如果一个类没有继承自object, 那么实例化出来的对象就是instance类型,否则就是class类型.

小甲鱼的铁粉 发表于 2020-6-27 15:39:31

xiaosi4081 发表于 2020-6-27 15:37
python中如果一个类没有继承自object, 那么实例化出来的对象就是instance类型,否则就是class类型.

不写它可以吗?

Twilight6 发表于 2020-6-27 16:02:02

本帖最后由 Twilight6 于 2020-6-27 16:09 编辑



这里的 instance 是描述符的参数 , 是这个被访问的实例对象的呀,不能去掉 但是你可以更改

比如你这里是通过 test 实例后访问,这里的 instance 就是指 test 实例对象,而 owner 是指你的实例对象的类对象,这里就是指 Test() 类对象

不能去掉,instance 是__get__,__set__ ,__delete__ 这些方法必要的参数

小甲鱼的铁粉 发表于 2020-6-27 16:17:30

Twilight6 发表于 2020-6-27 16:02
这里的 instance 是描述符的参数 , 是这个被访问的实例对象的呀,不能去掉 但是你可以更改

比如你 ...

python为什么会有类和对象这种玩儿意,折磨人啊{:10_266:}

Twilight6 发表于 2020-6-27 16:17:56

小甲鱼的铁粉 发表于 2020-6-27 16:17
python为什么会有类和对象这种玩儿意,折磨人啊

哈哈哈哈就是面对对象的语言,精髓所在
页: [1]
查看完整版本: python46讲魔法方法,描述符