Python:对象到str的隐式转换?

2024-03-30

给出以下代码

class A:
  def __init__(self ):
    self.b = B()

  def __repr__(self):
    #return "<A with {} inside>".format( self.b )
    #return "<A with " + repr(self.b) + " inside>"
    return "<A with " + self.b  + " inside>" # TypeError: Can't convert 'B' object to str implicitly

class B:
  def __repr__(self):
    return "<B>"

a = A()
print(a)

我想知道为什么是B__repr__“添加”A 时不会调用self.b到一个字符串。

  • https://docs.python.org/3/reference/datamodel.html#object。repr https://docs.python.org/3/reference/datamodel.html#object.__repr__
  • https://docs.python.org/3/reference/lexical_analysis.html#operators https://docs.python.org/3/reference/lexical_analysis.html#operators

连接不会导致self.b被评估为字符串。您需要明确告诉 Python 将其强制转换为字符串。

你可以这样做:

return "<A with " + repr(self.b)  + " inside>"

但使用str.format会更好。

return "<A with {} inside>".format(self.b)

然而,正如 jonrsharpe 指出的那样,会尝试调用__str__首先(如果存在),为了使其专门使用__repr__有这样的语法:{!r}.

return "<A with {!r} inside>".format(self.b)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:对象到str的隐式转换? 的相关文章

随机推荐

  • 邮政编码 + 国家/地区到地理坐标

    获取给定国家 地区的给定邮政编码 邮政编码的坐标 纬度 经度 的最完整 精确和可靠的方法是什么 我需要发出大量请求 因此高 API 限制率 甚至可能不存在 会很有用 GeoNames http www geonames org postal
  • 使用 movsd 让编译器复制字符

    我想在时间关键的函数中复制相对较短的内存序列 小于 1 KB 通常为 2 200 字节 CPU 端的最佳代码似乎是rep movsd 但是我不知何故无法让我的编译器生成此代码 我希望 我隐约记得看到过 使用 memcpy 可以使用编译器内置
  • 使用“严格引用”时不能使用字符串(“1”)作为子例程引用

    在对我尝试使用的各种事件做出反应的 Perl 守护进程中空对象模式 http en wikipedia org wiki Null Object pattern在 2 种情况下 通过创建匿名子例程 它应该只返回值 1 又名 true 请滚动
  • SQLAlchemy 与辅助表连接行为的关系在延迟加载和急切加载之间发生变化

    我已经使用 SQL Alchemy 几个月了 到目前为止 它给我留下了深刻的印象 我现在遇到了一个问题 这似乎是一个错误 但我不确定我是否在做正确的事情 我们在这里使用 MS SQL 通过表反射来定义表类 但是我可以使用内存 SQLite
  • maven部署到本地仓库

    有人可以告诉我如何将工件部署到本地存储库中以测试部署场景吗 问题是我们使用 nexus 作为远程存储库 我想知道是否可以使用自定义名称而不是 nexus 为我们提供的名称来部署我的工件 提前致谢 使用以下命令 mvn install ins
  • 使用正则表达式来匹配 IP 地址

    我正在尝试进行测试以检查 sys argv 输入是否与 IP 地址的正则表达式匹配 作为一个简单的测试 我有以下 import re pat re compile d 1 3 d 1 3 d 1 3 d 1 3 test pat match
  • SQL Server 围绕数字和下划线进行全文搜索

    使用 SQL Server 2012 通常使用 SQL Server 2008 R2 到 SQL Server 2016 这个问题是更具体的重新措辞SQL Server 全文索引意外结果 https stackoverflow com qu
  • 使用cache-control: no-store有什么缺点?

    我们希望 防止无意中释放或保留敏感信息 例如 在备份磁带上 并计划使用 HTTP 标头 Cache control no store 这样做有什么缺点 从规范来看 缓存似乎将继续运行 它只是不能使用非易失性存储 为了选择指定不存储的响应 我
  • 字符串到 xmlNode delphi(或如何将 xml 片段添加到 TXMLDocument)

    我有一些包含格式良好的 XML 的文本字符串 我希望能够 1 将这些字符串变成IXMLNodes然后 2 将它们附加到现有的XMLDocument 最好不声明新的XMLDocument第一的 这似乎不可能 有没有什么简单的方法可以完成等效的
  • 无法跟踪 sudo;报告有效 uid 不为零

    command bigxu bigxu ThinkPad T410 work lean sudo ls content shell pak leanote libgcrypt so 11 libnotify so 4 MACOSX reso
  • Newtonsoft 对象 → 获取 JSON 字符串

    我有一个由 Newtonsoft 的 JSON 序列化器创建的对象 我需要获取用于创建对象的 JSON 字符串 如何将对象序列化为简单的 JSON 字符串 尝试这个 public string jsonOut Returns JSON st
  • 由于 #ifdef,ctags 在带有不平衡大括号的源文件中被阻塞

    我在用ctags生成一个tags我正在处理的 C 项目的文件 但文件中缺少许多函数 这似乎是由于使用源文件中的大括号不平衡造成的 ifdef 一个 简化的 例子 include
  • 如何旋转 3D 散点图

    下面的代码使用 scatterplot3d 函数来运行高度 重量和体积的 3D 散点图 其中点是 1 6 之间的类值 角度目前为 45 度 我知道我可以通过改变角度来倾斜绘图 我应该使用什么代码将绘图向左或向右旋转 以便我可以提供绘图的多个
  • Android模拟器加载但不加载程序?

    我很确定我已经安装了所有必要的东西 我创建了 AVD 并尝试运行 SDK 中包含的示例应用程序之一 Jetboy 当我点击运行时 程序模拟器启动并最终加载 android 但没有应用程序启动 这是输出 2011 12 14 16 16 24
  • 标记为“已弃用”的 API 方法什么时候才会真正消失?

    我正在代码审查我的一位同事刚刚所做的更改 他添加了一堆调用Date toMonth Date toYear 和其他已弃用的Date方法 所有这些方法在 JDK 1 1 中均已弃用 但他坚持认为使用它们是可以的 因为它们还没有消失 我们正在使
  • C++ Console Application1.exe 已触发断点

    当我尝试设置时 cub SetArray cube 我收到一个错误 Console Application1 exe has triggered a breakpoint 我做错了什么 当我尝试调试时cub gt cubesarray我得到
  • 合并除关键字段之外的所有相同行,并使关键字段成为一个范围[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我看了很多帖子 但还没有找到我要找的东西 我不确定如何获取以下示例数据 host1 input nic1 ip1 ip2 PROT 3
  • Android adb shell am startservice:未找到错误

    我正在尝试从 adb shell 启动该服务 已经有类似的问题了 如何从 adb shell 启动和停止 android 服务 https stackoverflow com questions 7415997 how to start a
  • 关于Oracle解释计划中成本的问题

    当 Oracle 估算某些查询的 成本 时 它实际上会查看表中的数据量 行 吗 例如 如果我对员工进行全表扫描 查找 name Bob 它是通过计算现有行数来估计成本 还是始终是设定成本 成本优化器使用段 表和索引 统计信息以及系统 CPU
  • Python:对象到str的隐式转换?

    给出以下代码 class A def init self self b B def repr self return a format self b return a return a TypeError Can t convert B o