|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 jiujiaomutou 于 2020-3-2 16:42 编辑
class C:
def __getattribute__(self, name):
print('getattribute')
return super().__getattribute__(name)
def __setattr__(self, name, value):
print('setattr')
super().__setattr__(name, value)
def __delattr__(self, name):
print('delattr')
super().__delattr__(name)
def __getattr__(self, name):
print('getattr')
super().__getattr__(name)
c = C()
c.x
如果载入如上命令行,会打印:
AttributeError Traceback (most recent call last)<ipython-input-12-b710c0919212> in <module>() 18 19 c = C()---> 20 c.x<ipython-input-12-b710c0919212> in __getattr__(self, name) 15 def __getattr__(self, name): 16 print('getattr')---> 17 super().__getattr__(name) 18 19 c = C()AttributeError: 'super' object has no attribute '__getattr__'但是如果我定义一个类B: class B:
def __getattr__(self,name):
print(1)
class C(B):
def __getattribute__(self, name):
print('getattribute')
return super().__getattribute__(name)
def __setattr__(self, name, value):
print('setattr')
super().__setattr__(name, value)
def __delattr__(self, name):
print('delattr')
super().__delattr__(name)
def __getattr__(self, name):
print('getattr')
super().__getattr__(name)
c = C()
c.x
会打印:
getattribute
getattr
1
不会有报错
关于这两个对比的疑问是,是不是由于__getattr__魔法方法本身比较特殊,区别与__getattribute__等魔法方法,没有默认的父对象?还是由于啥原因导致,这两个命令的行的打印结果不同?烦请大神解答一下,谢谢
|
-
|