Python的魔术方法之迭代和序列化

迭代和序列化是Python中常用的功能。迭代魔术方法使对象可迭代,而序列化魔术方法允许对象在不同的数据格式之间进行转换。下面列举了10个实用的场景代码,展示了迭代和序列化相关的魔术方法的使用。

1. 实现可迭代对象:

class MyIterable:`    `def __init__(self, data):`        `self.data = data``   `    `def __iter__(self):`        `self.index = 0`        `return self``   `    `def __next__(self):`        `if self.index >= len(self.data):`            `raise StopIteration`        `value = self.data[self.index]`        `self.index += 1`        `return value``   ``my_iterable = MyIterable([1, 2, 3])``   ``for item in my_iterable:`    `print(item)

2. 使用生成器实现可迭代对象:

class MyIterable:`    `def __init__(self, data):`        `self.data = data``   `    `def __iter__(self):`        `for item in self.data:`            `yield item``   ``my_iterable = MyIterable([1, 2, 3])``   ``for item in my_iterable:`    `print(item)

3. 实现索引访问的序列:

class MySequence:`    `def __init__(self, data):`        `self.data = data``   `    `def __getitem__(self, index):`        `return self.data[index]``   ``my_sequence = MySequence([1, 2, 3])``   ``print(my_sequence[0])  # 输出: 1

4. 实现切片访问的序列:

class MySequence:`    `def __init__(self, data):`        `self.data = data``   `    `def __getitem__(self, index):`        `if isinstance(index, slice):`            `return self.data[index.start:index.stop:index.step]`        `else:`            `return self.data[index]``   ``my_sequence = MySequence([1, 2, 3, 4, 5])``   ``print(my_sequence[1:4])  # 输出: [2, 3, 4]

5. 实现序列的长度:

class MySequence:`    `def __init__(self, data):`        `self.data = data``   `    `def __getitem__(self, index):`        `return self.data[index]``   `    `def __len__(self):`        `return len(self.data)``   ``my_sequence = MySequence([1, 2, 3])``print(len(my_sequence))  # 输出: 3

6. 实现对象的字符串表示:

class MyClass:`    `def __str__(self):`        `return "This is MyClass"``   ``obj = MyClass()``print(obj)  # 输出: This is MyClass

7. 实现对象的字节表示:

class MyClass:`    `def __bytes__(self):`        `return b"MyClass"``   ``obj = MyClass()``print(bytes(obj))  # 输出: b'MyClass'

8. 实现对象的JSON序列化:

import json``   ``class MyClass:`    `def __init__(self, data):`        `self.data = data``   `    `def __json__(self):`        `return {"data": self.data}``   ``obj = MyClass([1, 2, 3])``json_str = json.dumps(obj, default=lambda o: o.__json__())``print(json_str)  # 输出: {"data": [1, 2, 3]}

9. 实现对象的pickle序列化:

import pickle``   ``class MyClass:`    `def __init__(self, data):`        `self.data = data``   `    `def __getstate__(self):`        `return {"data": self.data}``   `    `def __setstate__(self, state):`        `self.data = state["data"]``   ``obj = MyClass([1, 2, 3])``pickle_str = pickle.dumps(obj)``new_obj = pickle.loads(pickle_str)``print(new_obj.data)  # 输出: [1, 2, 3]

10. 实现对象的XML序列化:

import xml.etree.ElementTree as ET``   ``class MyClass:`    `def __init__(self, data):`        `self.data = data``   `    `def __xml__(self):`        `root = ET.Element("MyClass")`        `data_element = ET.SubElement(root, "data")`        `data_element.text = str(self.data)`        `return root``   ``obj = MyClass([1, 2, 3])``xml_str = ET.tostring(obj.__xml__())``print(xml_str)  # 输出: <MyClass><data>[1, 2, 3]</data></MyClass>

这些代码示例展示了迭代和序列化相关的一些常见应用场景,包括实现可迭代对象、使用生成器实现可迭代对象、实现索引访问的序列、实现切片访问的序列、实现序列的长度、实现对象的字符串表示、实现对象的字节表示、实现对象的JSON序列化、实现对象的pickle序列化以及实现对象的XML序列化。这些魔术方法可以帮助您定制对象的迭代行为和序列化行为。

以上就是“Python的魔术方法之迭代和序列化”的全部内容,希望对你有所帮助。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

二、Python必备开发工具

img

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

五、Python练习题

检查学习结果。

img

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

img

最后祝大家天天进步!!

上面这份完整版的Python全套学习资料已经上传至优快云官方,朋友如果需要可以直接微信扫描下方优快云官方认证二维码免费领取【保证100%免费】。
以上就是“Shortuuid —— 一个超好用的 Python 库”的全部内容,希望对你有所帮助。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

二、Python必备开发工具

img

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

五、Python练习题

检查学习结果。

img

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

img

最后祝大家天天进步!!

上面这份完整版的Python全套学习资料已经上传至优快云官方,朋友如果需要可以直接微信扫描下方优快云官方认证二维码免费领取【保证100%免费】。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值