Python的双下方法怎么使用


本文小编为大家详细介绍“Python的双下方法怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python的双下方法怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。大家在写 Python 代码的时候有没有这样的疑问。为什么数学中的+号,在字符串运算中却变成拼接功能,如'ab' + 'cd'结果为abcd;而*号变成了重复功能,如'ab' * 2结果为abab。为什么某些对象print能输出数据,而print自定义的类对象却输出一堆看不懂的代码<__main__.mycls object at>。不是因为系统做了特殊定制,而是 Python 中有一类特殊的方法,在某些特定的场合会自动调用。如,在字符串类str中定义了__add__方法后,当代码遇到字符串相加'ab' + 'cd'时,就会自动调用__add__方法完成字符串拼接。因为这类特殊方法的方法名都是以双下划线开始和结束,所以又被称为双下方法。Python 中的双下方法很多,今天我们对它做个详解。Python中的双下方法__init__的方法是很多人接触的第一个双下方法。当调用A()实例化对象的时候,__init__方法会被自动调用,完成对象的初始化。在类中定义运算符相关的双下方法,可以直接在类对象上做加减乘除、比较等操作。这里,定义一个尺子类Rule,它包含一个属性r_len代表尺子的长度。如果想按照尺子的长度对不同的尺子做比较,需要在Rule类中定义比较运算符。这里定义了>>=四个比较运算符,这样就可以用下面的代码比较Rule对象了。当用>比较rule1rule2的时候,rule1对象会自动调用__gt__方法,并将rule2对象传给other参数,完成比较。下面是比较运算符的双下方法比较运算符双下方法可以支持类对象加减乘除。这里定义了__add__方法,对应的是+运算符,他会把两个尺子的长度相加,并生成新的尺子。下面是算术运算符的双下方法它支持其他类型的变量与Rule类相加。以__radd__方法为例程序执行10 + rule1时,会尝试调用int类的__add__int类类没有定义与Rule类对象相加的方法,所以程序会调用+号右边对象rule1__radd__方法,并把10传给other参数。所以这种运算符又叫右加运算符。它所支持的运算符与上面的算术运算符一样,方法名前加r即可。增量赋值运算符是+=-=*=/=等。除了__pmod__方法,其他的跟算数运算符一样,方面名前都加i。这部分支持按二进制进行取反、移位和与或非等运算。由于Rule类不涉及位运算,所以我们换一个例子。定义二进制字符串的类BinStr,包含bin_str属性,表示二进制字符串。给BinStr定义一个取反运算符~__invert__方法中,遍历bin_str字符串,将每位取反,并返回一个新的BinStr类对象。下面是位运算符的双下方法这部分也支持反向位运算符和增量赋值位运算符,规则跟算数运算符一样,这里就不再赘述。这部分涉及两个双下方法__repr____format__,在某些特殊场景,如print,会自动调用,将对象转成字符串。还是以BinStr为例,先写__repr__方法。当程序执行print(x)时,会自动调用__repr__方法,获取对象x对应的字符串。再写__format__方法,它也是将对象格式化为字符串。当.format方法的前面字符串里包含0:时,就会自动调用__format__方法,并将字符串传给format_spec参数。调用int(obj)float(obj)等方法,可以将对象转成相对应数据类型的数据。当调用int(x)时,会自动调用__int__方法,将二进制字符串转成十进制数字。数值转换除了上面的两个外,还有__abs____bool____compl免费云主机域名ex____hash____index____str____str____repr__一样,在print时都会被自动调用,但__str__优先级更高。这部分可以像集合那样,定义对象长度、获取某个位置元素、切片等方法。以__len____getitem__为例len(x)会自动调用__len__返回对象的长度。通过[]方式获取对象的元素时,会自动调用__getitem__方法,并将切片对象传给item参数,即可以获取单个元素,还可以获取切片。集合相关的双下方法还包括__setitem____delitem____contains__。可以在对象上使用for-in遍历。当在x上使用for-in循环时,会先调用__iter__方法将游标cur_i置为初始值-1,然后不断调用__next__方法遍历self.bin_str中的每一位。这部分还有一个__reversed__方法用来反转对象。做 web 开发的朋友,用类相关的双下方法会更多一些。实例的创建是__new____init__方法,实例的销毁是__del__方法。__new__的调用早于__init__,它的作用是创建对象的实例(内存开辟一段空间),而后才将该实例传给__init__方法,完成实例的初始化。由于__new__是类静态方法,因此它可以控制对象的创建,从而实现单例模式__del__方法在实例销毁时,被自动调用,可以用来做一些清理工作和资源释放的工作。类属性的访问和设置。包括__getattr____getattribute____setattr____delattr__方法。__getattr____getattribute__的区别是,当访问类属性时,无论属性存不存在都会调用__getattribute__方法,只有当属性不存在时才会调用__getattr__方法。控制属性的访问,一般用于把属性的取值控制在合理范围内。包括__get____set____delete__方法。上述例子,通过类属性描述符,可以将属性x的取值控制在[0, 100]之前,防止不合法的取值。读到这里,这篇“Python的双下方法怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注百云主机行业资讯频道。

相关推荐: MySQL数据库的触发器和存储过程实例分析

这篇文章主要介绍“MySQL数据库的触发器和存储过程实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL数据库的触发器和存储过程实例分析”文章能帮助大家解决问题。1、掌握某主流DBMS支持的SQL编程语言和…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/22 11:40
下一篇 03/22 11:40

相关推荐