Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python正确使用_str__和_repr___Python_Bit Manipulation_Conventions_Representation - Fatal编程技术网

Python正确使用_str__和_repr__

Python正确使用_str__和_repr__,python,bit-manipulation,conventions,representation,Python,Bit Manipulation,Conventions,Representation,我当前的项目需要大量使用位字段。我发现了一个简单、功能强大的软件,但它缺少一些我需要的特性,所以我决定扩展它。我刚刚要实现\uuu str\uuuuuuuuuuuuuuuu和\uuuuuu repr\uuuuuuuuuu,我想确保我遵循惯例 \uuu str\uuu应该是非正式和简洁的,所以我让它返回位字段的十进制值(即str(位字段11)将是“3”) \uuuu repr\uuuu应该是对象的正式表示,因此我让它返回实际的位字符串(即repr(位字段11)将是“11”) 您认为此实现是否符合s

我当前的项目需要大量使用位字段。我发现了一个简单、功能强大的软件,但它缺少一些我需要的特性,所以我决定扩展它。我刚刚要实现
\uuu str\uuuuuuuuuuuuuuuu
\uuuuuu repr\uuuuuuuuuu
,我想确保我遵循惯例

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

\uuuu repr\uuuu
应该是对象的正式表示,因此我让它返回实际的位字符串(即
repr(位字段11)
将是
“11”

您认为此实现是否符合
str
repr
的约定

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

干杯


Pete

< P> >我考虑使用<代码> Sy-Strux替代十六进制表示。这样,更容易直观地看到实际位值是什么,因此更有用。但仍然非常简洁(实际上,字符比小数表示少)。.

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

我会让
\uuuu str\uuuu
返回二进制字符串,
\uuuuu repr\uuuu
返回
类名(二进制字符串)
,或者任何可以用来重新创建对象的东西

在模块(我维护)中,如果位字符串是4位长的倍数,则
\uuuu str\uuuu
为十六进制,否则为二进制或二者的组合。此外,如果位字符串非常长,则会被截断(您不希望在交互式会话中尝试打印100 MB的位字符串!)


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

\uuuu repr\uuu
需要返回一些东西,如果传递给构造函数,将创建与原始对象相同的新对象


您的返回“11”,但如果您将“11”传递给构造函数,则不会得到相同的位字段。因此,此
\uuu repr\uuuu
不正常。

有位字段模块可用,例如位字符串、位数组和位向量(检查PyPi)。如果你不想重新发明轮子,可能值得一看。我知道我在这里重新发明轮子,但我做这个项目是为了好玩,而且使用别人在这种情况下编写的代码(我知道这很愚蠢!)有些不满意。同意。我想作为一个规则eval(repr(x))应该尽可能地重新创建x。不确定str,但我喜欢这个解决方案。