为了账号安全,请及时绑定邮箱和手机立即绑定

Python __str__与__unicode__

Python __str__与__unicode__

呼唤远方 2019-11-23 10:49:50
有没有时,你应该实现一个python约定__str__()对__unicode__()。我已经看到类重写的__unicode__()频率比更高,__str__()但似乎不一致。当实施一个相对于另一个更好时,是否有特定的规则?实施这两种方法是否必要/良好做法?
查看完整描述

3 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

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


def __str__(self):

    return unicode(self).encode('utf-8')

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


查看完整回答
反对 回复 2019-11-23
?
MYYA

TA贡献1868条经验 获得超4个赞

如果我不特别关心给定类的微优化字符串化,那么我将始终__unicode__只实施它,因为它更笼统。当我确实关心此类微小的性能问题(这是例外,不是规则)时,可能__str__只有(当我可以证明在字符串化输出中绝不会出现非ASCII字符时)或两者(当两者都有可能时)可能救命。

我认为这些是牢固的原则,但实际上知道这是很常见的,只有ASCII字符而不花力气来证明它(例如,字符串形式只有数字,标点符号,并且可能是短的ASCII名称;-)在这种情况下,直接采用“公正__str__”方法是非常典型的做法(但是,如果我与一个编程团队合作过,为了避免这种情况,我建议我对该提议+1,因为在这些问题上很容易犯错,并且“过早的优化是编程中万恶之源” ;-)。


查看完整回答
反对 回复 2019-11-23
  • 3 回答
  • 0 关注
  • 310 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信