gpt4 book ai didi

浅谈Python魔法方法

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章浅谈Python魔法方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

特殊方法一览

浅谈Python魔法方法

在 Python 的学习和使用过程中, 你一定碰到过一些 特殊方法, 它们开头和结尾都有两条下划线, 也叫魔法方法 (Magic method), 或者 Dunder method (double under method). 。

例如

?
1
2
3
4
5
>>> dir ( int )
[ '__abs__' , '__add__' , '__and__' ,
'__bool__' , '__ceil__' , '__len__' ,
'__delattr__' , '__dir__' , '__divmod__' ,
'__doc__' , '__eq__' , '__float__' , ...]

* Python 的内置数据类型实现了非常多的魔法方法, 可以通过 dir() 进行查看. 。

初识魔法方法

当我们想从一个数组 nums = [1, 2, 3] 中获取第一个元素, 我们知道只需要执行 nums[0] 即可, 为了求得 nums[0] 的值, Python 的编译器实际上会隐式调用 nums.__getitem__(0) 。

?
1
2
3
4
5
>>> nums = [ 1 , 2 , 3 ]
>>> nums[ 0 ]
1
>>> nums.__getitem__( 0 )
1

再例如获取数组的长度, 我们使用 len(nums) 来获取, Python 编译器也是调用了特殊方法 nums.__len__() 。

?
1
2
3
4
>>> len (nums)
3
>>> nums.__len__()
3
  • 特殊方法的存在是给 Python 编译器隐式调用的
  • 我们自己写程序的时候不需要调用
  • 它从规范上, 不可以自己定义类似 _ _xx_ _ 的方法

魔法方法有什么作用

运算符重载

在 Python 中 + 可以对两个 int 类型的数据进行加操作, 也可以对字符串进行拼接, 这都是魔法方法在背后保证了整体语言风格的一致性. 。

魔法方法被大量用在运算符重载方面, 比如 +, -, * , /的操作. 我们自己可以定义想要的数据结构或者数据类型, 这些自定义的class可以跟 Python 内置的数据类型一样, 从而可以写出更具表达力的代码, 换句话说就是更具有 Pythonic 风格的代码. 。

动手实践

下面我们自定义一个叫工具人的类, 让这个类支持加法, 乘法, 大于等于等操作 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class ToolMan( object ):
 
     def __init__( self , name, age):
         self .name = name
         self .age = age
 
     def __len__( self ):
         return len ( self .name)
 
     def __str__( self ):
         return "你好, 打工人!"
 
     def __add__( self , other):
         # 将两个ToolMan的年龄加起来
         return self .age + other.age
 
     def __mul__( self , other):
         # 将两个 ToolMan 的年龄相乘
         return self .age * other.age
 
     def __ge__( self , other):
         # 对比连个 ToolMan 的年龄
         return self .age > = other.age

我们自定义了这样一个类, 你可以发现类中重写了很多魔法方法, 这些魔法方法可以让你自定义的类也实现类似 interger 的加减乘除, 比较大小等操作.

?
1
2
3
4
5
6
7
8
9
10
>>> tool_man1 = ToolMan( "打工人1" , 20 )
>>> tool_man2 = ToolMan( "打工人2" , 25 )
>>> print (tool_man1)
你好, 打工人!
>>> tool_man1 + tool_man2
45
>>> tool_man1 * tool_man2
500
>>> tool_man1 > = tool_man2
False

是不是还挺有意思的, 自己动手玩一玩吧~ 。

到此这篇关于浅谈Python魔法方法的文章就介绍到这了,更多相关Python魔法方法内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

原文链接:https://blog.csdn.net/weixin_43851569/article/details/117820775 。

最后此篇关于浅谈Python魔法方法的文章就讲到这里了,如果你想了解更多关于浅谈Python魔法方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com