面向对象的魔法方法(格式都是双下)
| 方法 |
作用 |
| init |
对象添加独有数据的时候自动触发 |
| str |
对象被执行打印操作的时候自动触发 |
| call |
对象加括号调用的时候自动触发 |
| getattr |
对象点不存在的名字的时候自动触发 |
| getattrbute |
对象点名字名字就触发,有他不会执行__getattr__ |
| setattr |
给对象添加或者修改数据的时候自动触发,对象.名字 = 数据值 |
| enter |
当对象被当做with上下文管理操作的开始自动触发,返回什么as后面的变量名接收什么 |
| exit |
with上下文管理语法运行完毕之后自动触发(子代码结束) |
魔法方法笔试题
1.补全下列代码使得运行不报错即可
class Context:
pass
with Context() as f:
f.do_something()
"""解决方法"""
class Context:
def do_something(self):
pass
def __enter__(self):
return self # 这里返回什么,f接收的就是什么
def __exit__(self, exc_type, exc_val, exc_tb):
pass
with Context() as f:
f.do_something() # f点就是对象点
2.自定义字典类型并让字典能够通过句点符的方式操作
"""解决方法"""
# 这个方法要用到继承,继承字典
class My_dict(dict):
def __setattr__(self, key, value): # __setattr__是对象在添加或者修改数据的时候触发
self[key] = value # 修改点名字修改或者添加数据触发的过程,改为字典的索引取值
def __getattr__(self, item): # __getarr__是在对象点不存在的名字的时候触发
return self.get(item) # 修改点不存在名字的触发改为get获取
obj = My_dict()
obj.name = 'jason'
obj.pws = 18
obj.hobby = 'read'
print(obj)