鱼C论坛

 找回密码
 立即注册
查看: 1650|回复: 3

[技术交流] Python45_魔法方法_属性访问

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

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

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

x
本帖最后由 ssjmhh56 于 2018-4-17 11:40 编辑

难点:
  • 属性访问时魔法方法顺序: 先__getattribute__再__getattr__
  • 注意循环陷阱, 不要在属性设置里面直接进行属性设置
  • super().__getattr__和self.__dict__的使用
Python45_魔法方法_属性访问.png

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2018-5-5 17:24:23 | 显示全部楼层
我想问一下第45讲中那个
def  __setattr__(self,name,value):
   if name ==square:
         self.width = value
         self.higt = value
在执行里面的self.width = value和self.higt = value为什么不会再次自动调用__setattr__的魔法方法??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-7 09:55:41 | 显示全部楼层
本帖最后由 ssjmhh56 于 2018-5-7 09:57 编辑
jm_chole 发表于 2018-5-5 17:24
我想问一下第45讲中那个
def  __setattr__(self,name,value):
   if name ==square:

抱歉这么晚才看到。
  1. #这是我用来测试的代码
  2. class Rectangle:
  3.    def __init__(self, width=0, height=0):
  4.       self.width = width
  5.       self.height = height
  6.       
  7.    def __setattr__(self, name, value):
  8.       print('setter调用')
  9.       if name == 'square':
  10.          print('square被调用')
  11.          self.width = value
  12.          self.height = value
  13.          
  14.          
  15.       else:
  16.          print('else被调用')
  17.          super().__setattr__(name, value)
  18.          
  19.          try:
  20.             print(self.width)
  21.             print(self.height)
  22.          except:
  23.             pass
  24.          
  25.    def getArea(self):
  26.       return self.width * self.height
复制代码

实际上会被调用, 其调用方式我用图片给你标注了, 希望能帮助你
QQ截图20180507092951.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-8 15:51:33 | 显示全部楼层
ssjmhh56 发表于 2018-5-7 09:55
抱歉这么晚才看到。
实际上会被调用, 其调用方式我用图片给你标注了, 希望能帮助你

哦哦谢谢!受教了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 23:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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