鱼C论坛

 找回密码
 立即注册
查看: 1278|回复: 0

[技术交流] 第 45 讲 魔方方法 属性访问

[复制链接]
发表于 2018-4-21 11:01:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. 测试题:
  2. 0.
  3. 意图是让实例对象在赋值的时候值加1.
  4. 不对.
  5. 应该改为:
  6. super().__setattr__(name,value + 1)

  7. 1.
  8. __getattribute__(self,name)

  9. 2.
  10. 3
  11. 2 和None

  12. 3.
  13. 2
  14. 1

  15. >>> c = C()
  16. >>> c.x
  17. 2
  18. 1
  19. Traceback (most recent call last):
  20.   File "<pyshell#31>", line 1, in <module>
  21.     c.x
  22.   File "<pyshell#29>", line 4, in __getattr__
  23.     return super().__getattr__(name)
  24. AttributeError: 'super' object has no attribute '__getattr__'
  25. super,没有getattr

  26. 4.
  27. self.counter 会一直加1

  28. self.counter = 1,这时候等式左边调用__getattr__方法,里面又有一个self.counter += 1,而这时候self.counter没有值,所以会出错.

  29. 动动手:
  30. 0.
  31. class A:
  32.         def __getattr__(self,name):
  33.                 return '该属性不存在!'

  34. 1.
  35. class Demo:
  36.     def __init__(self,x = 'FishC'):
  37.         self.x = x

  38. 2.
  39. 母鸡

  40. class Counter:
  41.         def __init__(self):
  42.                 super().__setattr__('counter', 0)
  43.         def __setattr__(self, name, value):
  44.                 super().__setattr__('counter', self.counter + 1)
  45.                 super().__setattr__(name, value)
  46.         def __delattr__(self, name):
  47.                 super().__setattr__('counter', self.counter - 1)
  48.                 super().__delattr__(name)
复制代码

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 09:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表