蟒蛇

有什么时候应该实现__str__()__unicode__()的Python约定。 我发现__unicode__() __str__() __unicode__()更频繁地覆盖__unicode__() __str__()但它看起来并不一致。 是否有更好的实施方法和其他方法的具体规则? 是否有必要/好的做法来实现两者?


__str__()是旧方法 - 它返回字节。 __unicode__()是新的首选方法 - 它返回字符。 这些名称有点令人困惑,但在2.x中,出于兼容性原因,我们坚持使用它们。 通常,您应该将所有字符串格式置于__unicode__() ,并创建一个存根__str__()方法:

def __str__(self):
    return unicode(self).encode('utf-8')

在3.0中, str包含字符,所以相同的方法被命名为__bytes__()__str__() 。 这些行为如预期。


如果我不特别关心给定类的微优化字符串化,我总是只实现__unicode__ ,因为它更通用。 当我关心如此微小的性能问题(这是例外,而不是规则)时,只有__str__ (当我证明字符串输出中永远不会有非ASCII字符时)或两者都有(当两者都可能时),可能有帮助。

这些我认为是可靠的原则,但在实践中,知道只有ASCII字符而没有做出努力来证明它(例如,字符串化表格只有数字,标点符号和一个简短的ASCII名称),这是非常常见的;-)其中在这种情况下,直接转到“just __str__ ”方法是非常典型的做法(但如果我与之合作的编程团队提出了一个本地准则以避免这种情况,那么我会对该提案采用+1,因为在这些问题上很容易犯错和“不成熟的优化是编程中所有邪恶的根源”;-)。


随着世界变得越来越小,有可能你遇到的任何字符串最终都会包含Unicode。 所以对于任何新的应用程序,您至少应该提供__unicode__() 。 无论你是否也覆盖__str__()这只是一个品味问题。

链接地址: http://www.djcxy.com/p/4849.html

上一篇: Python

下一篇: vertically center align text in the UIlabel