4

可能重复:
为什么 Python 在连接字符串时不执行类型转换?

与 C++ 或 Java 不同,每当我有类似print "Hello " + 1. 我收到一个错误,它无法连接strint对象。为什么这种转换不像其他语言那样隐式完成?

4

1 回答 1

8
print "Hello", 1

串联不起作用的原因是字符串对象中没有任何代码来执行类型转换作为其__add__()方法的一部分。至于为什么,想必圭多认为这是个坏主意。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)
于 2012-08-28T14:26:12.743 回答