gpt4 book ai didi

Python 正确使用 __str__ 和 __repr__

转载 作者:太空狗 更新时间:2023-10-29 18:27:03 26 4
gpt4 key购买 nike

我当前的项目需要大量使用位域。我找到了一个简单、实用的 recipe for bit a field class但它缺少一些我需要的功能,所以我决定扩展它。我只需要实现 __str____repr__ 并且我想确保我遵循约定。

__str__ 应该是非正式和简洁的,所以我让它返回位字段的十进制值(即 str(bit field 11) 将是 “3”

__repr__ 应该是对象的官方表示,所以我让它返回实际的位字符串(即 repr(bit field 11) 将是“11”)。

您认为此实现是否符合 strrepr 的约定?

此外,我还使用了 bin() 函数来获取存储在类中的值的位串。这与 Python < 2.6 不兼容,是否有替代方法?

干杯,

皮特

最佳答案

__repr__ 最好是一个可用于重新创建对象的字符串,例如,如果您对其使用 eval - 请参阅文档 here .这不是一门精确的科学,因为它可能取决于模块的用户如何导入它,例如。

我会让 __str__ 返回二进制字符串,__repr__ 返回 Classname(binary_string),或者任何可以用来重新创建的东西对象。

bitstring模块(我维护)如果位串是 4 位长的倍数,则 __str__ 是十六进制的,否则它是二进制的或两者的组合。此外,如果位串很长,则会被截断(您不想尝试在交互式 session 中打印 100 MB 的位串!)

如果我是你,我会完全避免使用 bin() 函数。原因是如果您的位串以零位开头,则无法使用它(请参阅我的问题 here )。我建议改用 bin 方法或属性。

关于Python 正确使用 __str__ 和 __repr__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2812809/

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