与 MarkupSafe , 在 Jinja 和 Flask 中使用,添加一个 str
对象和一个 Markup
对象返回一个 Markup
对象:
>>> from flask import Markup
>>> 'foo' + Markup('bar')
Markup('foobar')
但是如果我直接调用str.__add__
,它会返回一个str
对象:
>>> 'foo'.__add__(Markup('bar'))
'foobar'
所以看起来用+
添加str
和Markup
会调用Markup.__add__
而不考虑顺序操作数。这怎么可能?
最佳答案
+
运算符调用 Markup.__radd__
而不是 str.__add__
因为右操作数的类型(Markup
) 是左操作数类型 (str
) 的子类。
(参见 Difference between a+b and a.__add__(b))
在 Markup
对象上调用 str.__add__
时,Markup
对象仅被视为 str
对象和操作仅考虑 str
类型。
关于python - 为什么 str + Markup 返回一个 Markup 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58548570/