zoukankan      html  css  js  c++  java
  • 魔法方法

    在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__
  • 相关阅读:
    普通索引和唯一索引的选择
    深入理解MySQL索引(上)
    深入理解MySQL索引(下)
    Python3爬取小说并保存到文件
    MySQL45讲:一条update语句是怎样执行的
    IO软件层次结构与假脱机技术
    一条查询SQl是怎样执行的
    MySQL45讲笔记-事务隔离级别,为什么你改了数据我看不见
    了解一下IO控制器与控制方式
    3.6类别不平衡问题
  • 原文地址:https://www.cnblogs.com/zhangguosheng1121/p/11160630.html
Copyright © 2011-2022 走看看