魔法方法

在python中,有一些内置好的特定的方法,这些方法在进行特定的操作时会自动被调用,称之为魔法方法,下面介绍几种常见的魔法方法。

__init__ 实例化的时候会自动触发__init__的执行

__str__ 格式化方法:在外界打印该类对象时被调用(用于显示对象信息)
应用:在Model中定义返回的数据格式可以在admin直观的看到

__del__ 在对象被消耗的那一刹那被调用,在被消耗前可以做一些事情

__new__ 创建对象, 在实例化对象的时候会先触发__new__方法,创建对象,再触发__init__进行实例化

__call__ 调用类(对象())的时候会自动触发

__getter__ 在对象获取它没有的属性和方法的时候自动触发

__setter__ 在对象点属性设置属性值的时候自动触发

__getitem__ 对象['xx'] 触发

__setitem__ 在对象['xxx']=1 触发

__delitem__ 这个方法在对对象的组成部分使用__del__语句的时候被调用,应删除与key相关联的值

__mro__ 显示指定类的所有继承脉络和继承顺序

__iter__ 让对象可以迭代

__dic__ 对象将__init__字段以字典的形式传回,可以用于封装数据

 

复制代码
# __getitem__ 对象['xx'] 触发    
# __setitem__ 在对象['xxx']=1 触发    
# __delitem__ 这个方法在对对象的组成部分使用__del__语句的时候被调用,应删除与key相关联的值

    
class Tag:
    def __init__(self):
        self.change = {'python': 'python', 'php': 'php'}

    def __getitem__(self, item):
        print('调用getitem')
        return self.change[item]

    def __setitem__(self, key, value):
        print('调用setitem')
        self.change[key] = value

    def __delitem__(self, key):
        print('调用delitem')
        del self.change[key]


a = Tag()
print(a['python'])
a['python'] = 'go'
del a['php']
复制代码

 

复制代码
# with 触发的是哪个方法__enter__和__exit__

class Foo(object):
    def __init__(self):
        pass

    def __enter__(self):
        print("__enter__")

    def __exit__(self, exc_type, exc_val, exc_tb):
        print("__exit__")


obj = Foo()
with obj:
    print("xxx")
        
# 结果为
__enter__    
xxx
__exit__
复制代码

 

posted @   困了就睡觉觉  Views(398)  Comments(0Edit  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示