• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

浅谈Python魔法方法

python 搞代码 4年前 (2022-01-07) 23次浏览 已收录 0个评论
文章目录[隐藏]

今天给大家带来的是关于Python的相关知识,文章围绕着Python魔法方法展开,文中有非常详细的介绍及代码示例,需要来源gao@dai!ma.com搞$代^码网的朋友可以参考下

特殊方法一览

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

例如:

 >>> 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)

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

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

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

魔法方法有什么作用

运算符重载

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

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

动手实践

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

 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 的加减乘除, 比较大小等操作!

 >>> 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魔法方法内容请搜索gaodaima搞代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持gaodaima搞代码网

以上就是浅谈Python魔法方法的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:浅谈Python魔法方法

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址