46讲魔法方法属性访问结果有出入
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,想知道什么原因(无法上传图片)
你用的应该是其他编译器比如 PyCharm 吧,这个多次打印是正常现象,这些可以不用管,你用 IDLE 时候就不会这样了
这些不影响你的正常使用,这样自动打印多次可能是因为 PyCharm 之类的编译器有完整的内置环境吧
楼上正解,PyCharm会自动帮你执行一些操作,比如关闭文件,并且销毁对象等。 本帖最后由 Stubborn 于 2020-7-7 18:50 编辑
PyCharm测试一个都没有,用的什么编辑器的?这个是完整代码了?自定义属性被访问时的行为,你这个代码,什么都没有,进行实例化,不应该被触发
__getattribute__(self, name)
__getattribute__ 允许你自定义属性被访问时的行为,它也同样可能遇到无限递归问题(通过调用基类的 __getattribute__ 来避免)。 __getattribute__ 基本上可以替代 __getattr__ 。只有当它被实现,并且显式地被调用,或者产生 AttributeError 时它才被使用。 这个魔法方法可以被使用(毕竟,选择权在你自己),我不推荐你使用它,因为它的使用范围相对有限(通常我们想要在赋值时进行特殊操作,而不是取值时),而且实现这个方法很容易出现Bug。 确实是pycharm,如果是正常情况我就不用担心了 ee鱼c 发表于 2020-7-8 14:28
确实是pycharm,如果是正常情况我就不用担心了
没事 我当时学习的时候也被吓一跳了
页:
[1]