返回介绍

9.3 备选构造方法

发布于 2024-02-05 21:59:47 字数 851 浏览 0 评论 0 收藏 0

我们可以把 Vector2d 实例转换成字节序列了;同理,也应该能从字节序列转换成 Vector2d 实例。在标准库中探索一番之后,我们发现 array.array 有个类方法 .frombytes(2.9.1 节介绍过)正好符合需求。下面在 vector2d_v1.py(见示例 9-3)中为 Vector2d 定义一个同名类方法。

示例 9-3 vector2d_v1.py 的一部分:这段代码只列出了 frombytes 类方法,要添加到 vector2d_v0.py(见示例 9-2)中定义的Vector2d 类中

  @classmethod  ➊
  def frombytes(cls, octets):  ➋
    typecode = chr(octets[0])  ➌
    memv = memoryview(octets[1:]).cast(typecode)  ➍
    return cls(*memv)  ➎

❶ 类方法使用 classmethod 装饰器修饰。

❷ 不用传入 self 参数;相反,要通过 cls 传入类本身。

❸ 从第一个字节中读取 typecode。

❹ 使用传入的 octets 字节序列创建一个 memoryview,然后使用 typecode 转换。4

42.9.2 节简单介绍过 memoryview,说明了它的 .cast 方法。

❺ 拆包转换后的 memoryview,得到构造方法所需的一对参数。

我们用的 classmethod 装饰器是 Python 专用的,下面讲解一下。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文