<分区>
与 C++ 或 Java 不同,每当我有类似 print "Hello "+ 1
的内容时,我都会收到无法连接 str
和 的错误int
对象。为什么这种转换不在 Python 中隐式完成?
<分区>
与 C++ 或 Java 不同,每当我有类似 print "Hello "+ 1
的内容时,我都会收到无法连接 str
和 的错误int
对象。为什么这种转换不在 Python 中隐式完成?
最佳答案
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)
关于python - 为什么 Python 没有隐式转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12161402/