面向对象的魔法方法(格式都是双下)
方法 | 作用 |
---|---|
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)
标签:__,触发,obj,对象,self,魔法,面向对象,方法,def
From: https://www.cnblogs.com/zhanghong1229/p/16870094.html