蟒蛇
有什么时候应该实现__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__()
这只是一个品味问题。
上一篇: Python