魔法方法
在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__