鱼C论坛

 找回密码
 立即注册
查看: 1418|回复: 5

[已解决]46讲魔法方法属性访问结果有出入

[复制链接]
发表于 2020-7-7 15:07:59 | 显示全部楼层 |阅读模式

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

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

x
class C:
    def __getattribute__(self,name):
        print('getattribute')
        return super().__getattribute__(name)
    def __getattr__(self, name):
        print('getattr')
    def __setattr__(self, name, value):
        print('setattr')
        super().__setattr__(name,value)
    def __delattr__(self, item):
        print('delattr')
        super().__delattr__(name)

c = C()
对象实例化后直接调用近20次getattribute,想知道什么原因(无法上传图片)
最佳答案
2020-7-7 15:09:53



你用的应该是其他编译器比如 PyCharm 吧,这个多次打印是正常现象,这些可以不用管,你用 IDLE 时候就不会这样了

这些不影响你的正常使用,这样自动打印多次可能是因为 PyCharm 之类的编译器有完整的内置环境吧


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

使用道具 举报

发表于 2020-7-7 15:09:53 | 显示全部楼层    本楼为最佳答案   



你用的应该是其他编译器比如 PyCharm 吧,这个多次打印是正常现象,这些可以不用管,你用 IDLE 时候就不会这样了

这些不影响你的正常使用,这样自动打印多次可能是因为 PyCharm 之类的编译器有完整的内置环境吧


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

使用道具 举报

发表于 2020-7-7 15:57:58 | 显示全部楼层
楼上正解,PyCharm会自动帮你执行一些操作,比如关闭文件,并且销毁对象等。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-7 18:44:31 | 显示全部楼层
本帖最后由 Stubborn 于 2020-7-7 18:50 编辑

PyCharm  测试一个都没有,用的什么编辑器的?这个是完整代码了?自定义属性被访问时的行为,你这个代码,什么都没有,进行实例化,不应该被触发



__getattribute__(self, name)
__getattribute__ 允许你自定义属性被访问时的行为,它也同样可能遇到无限递归问题(通过调用基类的 __getattribute__ 来避免)。 __getattribute__ 基本上可以替代 __getattr__ 。只有当它被实现,并且显式地被调用,或者产生 AttributeError 时它才被使用。 这个魔法方法可以被使用(毕竟,选择权在你自己),我不推荐你使用它,因为它的使用范围相对有限(通常我们想要在赋值时进行特殊操作,而不是取值时),而且实现这个方法很容易出现Bug。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-8 14:28:33 | 显示全部楼层
确实是pycharm,如果是正常情况我就不用担心了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-8 14:34:14 | 显示全部楼层
ee鱼c 发表于 2020-7-8 14:28
确实是pycharm,如果是正常情况我就不用担心了

没事 我当时学习的时候也被吓一跳了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 01:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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