以下所有魔法方法记得左右两边加上两杠下划线
1.getattr(self, name):
定义一个当用户试图获取一个不存在的属性时的行为。
例子:
class A:
def __init__(self,a,b):
self.a = a
self.b = b
def __getattr__(self,name):
print("没有这个属性哦!")
c = A(1,2)
c.c
#输出没有这个属性哦
2.getattribute(self, name):
定义一个当用户访问该类某属性时的行为。
例子:
class A:
def __init__(self,a,b):
self.a = a
self.b = b
def __getattribute__(self,name):
print("调用getattribute方法")
return super().__getattribute__(name) #返回基类的getattribute方法的返回值
c = A(1,2)
print(c.a)
#输出调用getattribute方法,1
3.setattr(self, name, value):
定义当一个属性被设置时的行为。
例子:
class A:
def __init__(self,a,b):
self.a = a
self.b = b
def __setattr__(self,name,value):
print("调用setattr方法")
super.__setattr__(self,name,value)
c = A(10,5)
c.c = 6
#输出3次调用setattr方法
1.delattr(self, name):
定义当一个属性被删除时的行为。
例子:
class A:
def __init__(self,a,b):
self.a = a
self.b = b
def __delattr__(self,name):
print("调用delattr方法")
super.__delattr__(self,name)
c = A(10,5)
del c.a
#输出调用delattr方法