python - 为什么 str + Markup 返回一个 Markup 对象?

标签 python flask jinja2

MarkupSafe , 在 Jinja 和 Flask 中使用,添加一个 str 对象和一个 Markup 对象返回一个 Markup 对象:

>>> from flask import Markup
>>> 'foo' + Markup('bar')
Markup('foobar')

但是如果我直接调用str.__add__,它会返回一个str对象:

>>> 'foo'.__add__(Markup('bar'))
'foobar'

所以看起来用+添加strMarkup会调用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/

相关文章:

sql - 如何在 DBT 模型中使用引号内的 env_var?

python - 根据其他列上的某些条件更新 dask 数据框中列的值

python - Mysql 不从 Aqua data studio 或 Django 返回现有行

python - Celery Worker 的预定 (eta) 任务关闭时会发生什么情况?

python - pip安装flask-user时出现"Failed building wheel for py-bcrypt"

templates - 如何获得 Ansible 模板以在条件后支持新行

python - 如何从 pandas.to_latex 的输出中删除多余的反斜杠?

python - flask-bootstrap 在一页中有两种形式

使用 Flask 服务器的 Python 脚本在 Windows 上退出需要很长时间

python - jinja2 变量命名 - 变量命名限制是否与 Python 变量相同?