__getattr__
触发时机:访问不存在的对象成员的时候自动触发
作用:防止访问不存在成员的时候报错!为不存在的成员定义值
参数:一个self接受当前对象,第二个参数接受访问成员的名称字符串
返回值:可有可无
注意事项:无
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| class Human: def __init__(self): self.name = '东方不败' self.sex = '男' self.age = 18
def __getattr__(self,item): if 'name' in item: return self.name
def eat(self): print('一天三顿小烧烤~') def drink(self): print('喝啤酒~')
df = Human() print(df)
print(df.name2)
|
__setattr__
触发时机:添加对象成员或者修改对象成员的时候自动触发!
作用:可以限制或者管理对象成员的添加与修改操作
参数:一个self接受当前对象 第二个接受设置的成员名称字符串 第三个设置的值
返回值:无
注意事项:在当前魔术方法中禁止使用当前对象.成员名 = 值的方式,会触发递归cao’zuo!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| class Human: sex = '男' def __init__(self): self.name = '东方不败' self.age = 18
def __setattr__(self,attrname,value): if attrname == 'sex': pass else: object.__setattr__(self,attrname,value)
def eat(self): print('一天三顿小烧烤~') def drink(self): print('喝啤酒~')
df = Human() print(df.__dict__)
df.name = '西门吹雪'
print(df.__dict__)
print(df.sex)
df.sex = '女' print(df.sex)
|
__delattr__
触发时机:删除对象成员的时候自动触发
作用:可以限制对象成员的删除
参数:一个self接受当前对象,另外一个接受删除的成员属性名称的字符串
返回值:无
注意事项:如果要删除对象成员,要借助object中的__delattr__来操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| class Human: color = 'yellow' hair = '黑色' def __init__(self): self.name = '王老五' self.sex = '男' self.age = 38
def __delattr__(self,attrname): if attrname == 'sex': pass else: object.__delattr__(self,attrname)
def eat(self): print('夏天就要吃小龙虾·!') def drink(self): print('我喜欢喝冰糖雪梨')
wlw = Human() print(wlw.__dict__)
del wlw.name
del wlw.sex
del wlw.age print(wlw.__dict__)
|
__dir__
触发时机:使用dir函数操作对象的时候自动触发
作用:
参数:一个self接受当前对象
返回值:有,必须是容器类数据
注意事项:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| class Human: color = 'yellow' hair = '黑色'
def __init__(self): self.name = '王老五' self.sex = '男' self.age = 38
def __dir__(self): allmember = list(self.__dict__) + list(Human.__dict__) ownmember = [i for i in allmember if not i.startswith('__') and not i.endswith('__')] return ownmember
def eat(self): print('夏天就要吃小龙虾·!') def drink(self): print('我喜欢喝冰糖雪梨')
wlw = Human()
result = dir(wlw) print(result)
|