面向对象的魔法方法

面向对象的魔法方法(格式都是双下)

方法 作用
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)
posted @ 2022-11-08 16:15  雪语  阅读(43)  评论(0)    收藏  举报