为什么python没有隐式转换?

时间:2012-08-28 14:22:05

标签: python concatenation

  

可能重复:
  Why does Python not perform type conversion when concatenating strings?

与c ++或java不同,每当我有print "Hello " + 1之类的东西时。我收到一个错误,它无法连接strint个对象。有没有理由为什么这种转换不像其他语言那样隐式地进行?

1 个答案:

答案 0 :(得分:7)

print "Hello", 1

连接不起作用的原因是字符串对象中没有任何代码可以作为__add__()方法的一部分执行类型转换。至于为什么,据说Guido认为这是一个坏主意。 Python的禅宗说“明确比隐含更好。”

你可以写一个以这种方式工作的字符串子类,但是:

class MagicStr(str):
    def __add__(self, other):
        return MagicStr(str(self) + str(other))
    def __radd__(self, other):
        return MagicStr(str(other) + str(self))
    __iadd__ = __add__

当然,没有办法让Python将该类用于字符串文字或用户输入,因此您不得不经常转换字符串:

 MagicStr("Hello") + 1

此时您可以写下:

 "Hello" + str(1)