使用不同格式选项实现 __str__ 方法的 Pythonic 方法是什么?

2023-12-24

我想创建一个__str__根据用户选择创建各种格式的字符串的方法。

我想出的最好的办法就是制作一个__str__(**kwargs)方法,这似乎工作正常,但它不兼容str(obj) or print(obj)。换句话说我必须使用print(obj.__str__(style='pretty'))而不是print(obj, style='pretty').


实施object.__format__() method https://docs.python.org/3/reference/datamodel.html#object.__format__相反,用户可以指定所需的格式format()功能 https://docs.python.org/3/library/functions.html#format and str.format() method https://docs.python.org/3/library/stdtypes.html#str.format:

print(format(obj, 'pretty'))

or

print('This object is pretty: {:pretty}'.format(obj))

您可能希望将大部分格式处理委托给str.__format__:

def __format__(self, spec):
    if spec.endswith('pretty'):
        prettified = self.pretty_version()
        return prettified.__format__(spec[:-6])
    return str(self).__format__(spec)

这样您仍然可以支持默认的所有字段宽度和填充对齐选项str.__format__方法支持。

Demo:

>>> class Foo():
...     def __str__(self):
...         return 'plain foo'
...     def pretty_version(self):
...         return 'pretty foo'
...     def __format__(self, spec):
...         if spec.endswith('pretty'):
...             prettified = self.pretty_version()
...             return prettified.__format__(spec[:-6])
...         return str(self).__format__(spec)
... 
>>> f = Foo()
>>> print(f)
plain foo
>>> print(format(f))
plain foo
>>> print(format(f, 'pretty'))
pretty foo
>>> print(format(f, '>20pretty'))
          pretty foo
>>> print('This object is pretty: {:^20pretty}!'.format(f))
This object is pretty:      pretty foo     !
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用不同格式选项实现 __str__ 方法的 Pythonic 方法是什么? 的相关文章

随机推荐

  • 影响数据库的 Angular e2e 测试

    这是我的问题 一步一步 我认为这样读起来更好 不像一堵文字墙可怜地试图解释我的特定领域的问题 1 我们有一个Angular js应用程序与PHP后端支持MongoDB贮存 2 Protractor用于端到端测试 3 需要测试改变数据库的页面
  • C# HttpWebRequest POST 不发送参数

    我正在尝试使用下一个代码执行带有参数的 POST 请求 我正在使用本地 php 脚本来接收参数 但是当我执行请求时 php 脚本没有接收从我的 C 函数发送的参数 它说 注意 未定义索引 detalle 注意 未定义索引 method pa
  • Glassfish - 上传图像 - 正确执行

    我使用的是最新的 glassfish 3 1 2 所以不需要 apache FileItem 并且 getPart 没有错误 我读到上传图像的最佳实践是将它们保存在文件系统上 请参阅here https stackoverflow com
  • 如何查看包的历史记录?

    如何查看 Npm 注册表中包的历史记录 我特别想知道什么时候https npmjs org package npm https npmjs org package npm1 1 2版本发布 你可以做npm view npm您可以在以下位置找
  • 删除as3中的空格

    如何从 as3 中的字符串中删除空格 我希望能够删除所有回车符 空格 制表符等 您可以使用正则表达式 var rex RegExp s r n gim var str String This is a string str str repl
  • 即使 Ant 任务失败,Ant 也会成功

    我一定缺少一个简单的设置 所以请原谅我 但我有两次注意到我的坏蚂蚁任务不会导致构建失败 例如 当源文件不存在时 Ant 复制 构建成功 Ant 解压缩 当任务报告 无法写入文件 或类似消息时 构建成功 Ant 执行错误 语法无效 构建成功
  • 如何在WPF中叠加图像?

    我有两个图像需要重叠 例如 我需要在实心矩形顶部有一个实心圆 所以 我可以看到整个圆 但只能看到矩形的角 我不希望圆圈是透明的 原本的circle png没有矩形边框 它的边界仅沿着圆的边界 因此 理想情况下 整个圆不应与矩形重叠 这是显示
  • 员工工资查询错误

    我正在尝试制作一家公司的薪资报告 我想通过使用如下查询来显示该公司的所有员工 select tab1 name tab1 job tab1 salary tab2 discount days tab1 salary tab1 salary
  • cmd中转义特殊字符

    我有一个 Windows bat 脚本 在其中尝试运行参数中包含密码的命令 我希望能够使用的密码是 gt lt 从我读到的here http ss64 com nt syntax esc html 我应该逃走 lt gt with 根据我的
  • glDrawArrays 上的 OpenGL ES EXC_BAD_ACCESS

    我在 OpenGL ES 1 1 中为我正在构建的 iPhone 游戏进行渲染时遇到问题 简而言之 我正在渲染 3 个项目 背景 效果很好 许多球形物体 效果很好 一个改变大小的简单线圆 我在这里遇到问题 基本上 当我在圆上调用 drawA
  • 如何生成 Identity Server 签名证书

    在身份服务器示例中 我们发现这样的代码Startup cs var certFile env ApplicationBasePath idsrv3test pfx var signingCertificate new X509Certifi
  • C++ 二进制文件和迭代器:使用 ifstreambuf_iterator 摆脱 1:1 的束缚?

    这个答案 https stackoverflow com a 13665583 2485710指出 C 不太适合对二进制文件进行迭代这一事实 但这正是我现在所需要的 简而言之 我需要以 二进制 方式操作文件 是的 所有文件都是二进制的 即使
  • 对 SVG 组进行动画处理

    我目前有以下 SVG
  • 使用 Lua 注册闭包

    我不想使用 lua CFunction 签名来编写从 Lua 调用的方法 而是使用我自己的函数签名来简化导出过程 void foo call t call int a char b char c table t d reading argu
  • Angular Reactive 表单嵌套 FormGroup 中的空值

    我有一个带有嵌套表单组的角反应表单 this form new FormGroup name new FormControl address new FormGroup line1 new FormControl line2 new For
  • Modernizr 可以异步加载脚本但按顺序执行它们吗?

    我正在尝试 Modernizer load 我有这个 Modernizr load load js jquery 1 6 1 js js jquery tools min js js myscript js 如果我理解正确的话 我可以使用这
  • 使用 OWIN 的混合模式身份验证

    我正在构建一个 MVC 5 应用程序 我需要根据 AD 和 SQL 数据库或 Web 服务对人员进行身份验证 要求是 如果一个人登录到公司网络或通过 VPN 连接 我必须登录他们而不要求提供凭据 如果用户通过互联网访问网站或没有 AD 帐户
  • 打印所需数量的倒​​星图案[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 倒星图案由给定行数的星号组成 其中下一行少一个星号 直到最后一行剩下一个星号 每五个星号替换为 see image https i stac
  • Android AOSP 汽车模拟器

    我正在尝试构建一个汽车模拟器 因为 Android studio 3 5 未检测到系统映像 我已经在Android 8和9中尝试过并下载了所有工具 如何在AOSP中构建汽车模拟器 您需要 Mac 或 Linux 来构建模拟器 执行以下站点中
  • 使用不同格式选项实现 __str__ 方法的 Pythonic 方法是什么?

    我想创建一个 str 根据用户选择创建各种格式的字符串的方法 我想出的最好的办法就是制作一个 str kwargs 方法 这似乎工作正常 但它不兼容str obj or print obj 换句话说我必须使用print obj str st