鱼C论坛

 找回密码
 立即注册
查看: 2905|回复: 1

[已解决]045 魔法方法:属性访问的疑问

[复制链接]
发表于 2020-2-29 15:04:57 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 jiujiaomutou 于 2020-2-29 15:08 编辑

    class C:
   
        def __getattribute__(self, name):
            print('getattribute')
            # 使用 super() 调用 object 基类的 __getattribute__ 方法
            # 由于需要返回值,所以使用super函数找到父类,用于返回
            return super().__getattribute__(name)  

        def __setattr__(self, name, value):
            print('setattr')
            super().__setattr__(name, value)

        def __delattr__(self, name):
            print('delattr')
            super().__delattr__(name)
            
           #魔法方法__getattr__会自动被调用,通过def的方式可以进行重写
        def __getattr__(self, name):
            print('getattr')


      问题:
      1、关于 def __delattr__(self, name)部分,为什么需要跟一个“super().__delattr__(name)”去寻找父对象?
      
          关于这个问题个人理解是:魔法方法__delattr__不是会,在执行删除动作自动触发,在去执行‘super().__delattr__(name)’也没有必要吧?测试了一下,如果不添加,也不会报错
   
       2、在__getattr__(self, name)部分,未使用super(),这个原因是什么?
最佳答案
2020-2-29 15:47:19
1. 如果不调用父类的 __delattr__ ,自身的属性就不会删除。

2. 如果调用了父类的 __getattr__ 就会报错,因为魔法方法 __getattr__ 会当属性不存在时调用。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-29 15:47:19 | 显示全部楼层    本楼为最佳答案   
1. 如果不调用父类的 __delattr__ ,自身的属性就不会删除。

2. 如果调用了父类的 __getattr__ 就会报错,因为魔法方法 __getattr__ 会当属性不存在时调用。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-1 18:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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