与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)
str
。 - kindallstr
时出现错误,但仍然获得type("dude")
。 - Huge
str
还是你的int
?“显式优于隐式”... - Pierre GMstr
类型,但在打印之前的行为并不容易推断。如果我说print '4' + 2
,我应该得到6
还是42
?print 4 + '2'
呢? - Silas Ray