3 回答

吃鸡游戏
TA贡献1829条经验 获得超7个赞
__str__()是旧方法-返回字节。__unicode__()是新的首选方法-它返回字符。名称有些混乱,但是在2.x中,出于兼容性原因,我们坚持使用它们。通常,您应该将所有字符串格式都放在中__unicode__(),并创建一个存根__str__()方法:
def __str__(self):
return unicode(self).encode('utf-8')
在3.0中,由于str包含字符,所以将__bytes__()和命名为相同的方法__str__()。这些行为符合预期。

MYYA
TA贡献1868条经验 获得超4个赞
如果我不特别关心给定类的微优化字符串化,那么我将始终__unicode__
只实施它,因为它更笼统。当我确实关心此类微小的性能问题(这是例外,不是规则)时,可能__str__
只有(当我可以证明在字符串化输出中绝不会出现非ASCII字符时)或两者(当两者都有可能时)可能救命。
我认为这些是牢固的原则,但实际上知道这是很常见的,只有ASCII字符而不花力气来证明它(例如,字符串形式只有数字,标点符号,并且可能是短的ASCII名称;-)在这种情况下,直接采用“公正__str__
”方法是非常典型的做法(但是,如果我与一个编程团队合作过,为了避免这种情况,我建议我对该提议+1,因为在这些问题上很容易犯错,并且“过早的优化是编程中万恶之源” ;-)。
添加回答
举报
0/150
提交
取消