class C:
def __getattr__(self, name):
print(1)
return super().__getattr__(name)
def __getattribute__(self, name):
print(2)
return super().__getattribute__(name)
def __setattr__(self, name, value):
print(3)
super().__setattr__(name, value)
def __delattr__(self, name):
print(4)
super().__delattr__(name)
c = C()
c.x
# 显示结果为:
Traceback (most recent call last):
2
File "E:/Python Program/test.py", line 128, in <module>
1
c.x
File "E:/Python Program/test.py", line 113, in __getattr__
return super().__getattr__(name)
AttributeError: 'super' object has no attribute '__getattr__'
原因:
首先c.x会先调用getattribute()魔法方法,打印2;
然后调用super().getattribute(),找不到属性名x,
因此会紧接着调用getattr()魔法方法,于是打印1,
然后调用super().getattr()。但是Python会告诉你AttrError,super对象木有getattr()!!
__getattr__,getattribute,setattr,delattr的区别
原创
©著作权归作者所有:来自51CTO博客作者ck_god的原创作品,请联系作者获取转载授权,否则将追究法律责任
下一篇:多级评论的实现
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Python的getattr(),setattr(),delattr(),hasattr()
getattr()
python getattr setattr delattr hasattr -
python 之反射机制 hasattr、getattr、setattr、delattr
指在运行时检查、访问和修改对象的属性和方法,而不需要提前知道这些属性和方法。
python 动态分析 反射机制 取对象