博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python高级编程 读书笔记: 8、 第4章_魔术方法
阅读量:3661 次
发布时间:2019-05-21

本文共 2796 字,大约阅读时间需要 9 分钟。

# -*- encoding: utf-8 -*-import functoolsimport time'''8、 第4章_魔术方法关键:1 魔术方法含义:用于重载操作符或者内置方法定义:可以通过__语法定义语法: 将下划线放到方法名称的两端钩子: 在特定事件发生时,能够为响应事件而调用的代码,回调函数就是钩子的一种类型2 可用的魔术方法2.1 __init__方法__init__方法没有创建新对象,创建新对象是__new__完成的。__init__是为创建后的对象提供初始化数据。2.2 __new__方法在__init__方法之前执行,用于创建类的实例。参数:创建实例所需要的类2.3 __del__方法在对象被销毁时被调用。无论时直接删除对象还是垃圾回收器触发,都会调用__del__方法 2.4 __str__含义: 在对象传递给str的构造函数时被调用 2.5 __unicode__特点:在对象被传递给unicode构造函数时调用如果格式化unicode对象时,遇到%s,优先使用__unicode__方法2.6 __bool__作用:判定对象是否为True或者Falsepython2中时__nonzero__方法2.7 __int__作用: 将对象转换为数字2.8 __float__作用: 将对象转换为浮点数2.9 __complex__作用: 将对象转换为复数2.10 __eq__作用: 判定两个对象使用 == 操作符号比较时被调用2.11 __ne__作用: 在使用!=操作符时使用2.12 __lt__作用: <2.13 __gt__作用: >2.14 __le__作用: <=2.15 __ge__作用: >=3 操作符重载3.1 二元操作符对于每个操作符,有3种魔术方法1) 普通方法: x+y 等提供与 x._add_(y),仅仅返回结果2) 取反方法: 在第一个操作对象不提供传统方法并且操作对象类型不同时才调用,将操作符两边对象顺序交换x+y如果x没有定义_add_方法,则调用y._radd_(x)3) 即席方法: 在操作符即席修改第一个变量时被调用,例如(+=)x+=y 等同于 x._iadd_(y)3.2 除法特点: 向下取整python2中是__div__方法python3中是__truediv__方法3.3 一元操作符+, - , ~特点: 只接受一个位置参数self分别与:__pos__(与+匹配)__neg__(与-匹配)__invert_(与~匹配)~x等同于x._invert_()4 重载常见方法4.1 __len__作用: 描述对象的长度参数: 接受位置参数,并返回整型值4.2 __repr__作用: 确定对象在Python交互式终端中的显示方式。        也可以用于重构对象的Python表达式        4.3 __hash__作用: 通过数字化表达式唯一标识对象参数: 接受位置参数self,并返回整型值特点: 对象提供了__hash__函数,通常返回该对象的id4.4 __format__作用: 根据Python的格式化规范来格式化不同种类的对象参数: 接受两个位置参数,第一个是self,第二个是格式化规范的字符串4.5 __instancecheck__issubclass:检查一个类是否继承自另一个类5 集合5.1 __contains__作用: 判断某个对象是否在一个集合中参数: 接受参数self和needle,判断needle是否在集合中5.2 __getitem__作用: 进行键查找,基本表达式是hatstack[key]参数: 接受两个参数self和key5.3 __setitem__作用: 设置集合中元素的值参数: self, key, value5.4 __delitem__作用: 在使用del关键字时被调用5.5 __getattr__作用: 常规方式无法找到属性时才被调用参数: self, key5.6 __setattr__作用: 赋值给一个对西那个时被调用,方法会一直被调用5.7 __getattribute__作用: 被无条件调用,只有当__getattribute__发生异常,才会调用__getattr__参考:Python高级编程'''class DelClass(object):    def __del__(self):        print "I want to be professional at python."def useDel():    DelClass()class StrClass(object):    def __str__(self):        return "This is class: {value}".format(            value=self.__class__.__name__)def useStrMagicMethod():    result = str(StrClass())    print resultclass Who(object):    def __str__(self):        return 'string'    def __unicode__(self):        return u'unicode'def useUnicodeMagicMethod():    info = u"This is %s" % (Who())    print info    info = "This is %s" % (Who())    print infoclass InvertString(object):    def __init__(self, s):        self.s = s    def __str__(self):        return self.s    def __invert__(self):        return self.s[::-1]def useInvertMagicMethod():    word = "I want to be professional at python."    temp = InvertString(word)    result = ~temp    print resultdef process():    useDel()    useStrMagicMethod()    useUnicodeMagicMethod()    useInvertMagicMethod()if __name__ == "__main__":    process()

 

转载地址:http://svlfn.baihongyu.com/

你可能感兴趣的文章
正则表达式
查看>>
Java中集合的输出方式
查看>>
数组排序的四种方法
查看>>
Java学习笔记
查看>>
JDBC技术(一)
查看>>
JDBC技术(三)——预防SQL注入攻击
查看>>
JDBC技术(五)——JDBC工具类
查看>>
JDBC(六)——JDBC读取数据表,将数据存入对象中,并将对象存储到集合中
查看>>
hibernate原理
查看>>
IDEA快捷键
查看>>
Struts2原理
查看>>
activemq总结
查看>>
jdk环境变量配置
查看>>
mybatis原理
查看>>
spring原理
查看>>
AOP
查看>>
JDK和JRE的区别
查看>>
zookeper正式集群搭建(非伪集群)
查看>>
linux定时备份mysql(可用)
查看>>
linux使用链接下载文件
查看>>