|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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(),这个原因是什么?
1. 如果不调用父类的 __delattr__ ,自身的属性就不会删除。
2. 如果调用了父类的 __getattr__ 就会报错,因为魔法方法 __getattr__ 会当属性不存在时调用。
|
|