使用 str.format() 访问对象属性

新手上路,请多包涵

我有一个 Python 对象,其属性为 a , b , c

我仍然使用旧的字符串格式,所以我通常会手动打印这些:

  print 'My object has strings a=%s, b=%s, c=%s' % (obj.a, obj.b, obj.c)

最近,我的字符串变得超长,我更愿意能够简单地将对象传递给字符串格式函数,例如:

  print 'My object has strings a=%a, b=%b, c=%c'.format(obj)

但是,语法不正确。这可能吗?

原文由 Adam Hughes 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 401
2 个回答

您可以在格式字段本身内使用 .attribute_name 表示法:

 print 'My object has strings a={0.a}, b={0.b}, c={0.c}'.format(obj)

下面是一个演示:

 >>> class Test(object):
...     def __init__(self, a, b, c):
...         self.a = a
...         self.b = b
...         self.c = c
...
>>> obj = Test(1, 2, 3)
>>> 'My object has strings a={0.a}, b={0.b}, c={0.c}'.format(obj)
'My object has strings a=1, b=2, c=3'
>>>

但是请注意,执行此操作时确实需要对格式字段进行编号。另外,如您所见, str.format 函数的格式字段由大括号 {...} 表示,而不是 %

有关更多信息,请参阅 Python 格式字符串语法 参考。

原文由 user2555451 发布,翻译遵循 CC BY-SA 3.0 许可协议

我认为最好使用 vars() 访问对象的属性作为 dict 而不是 usng __dict__

所以你可以这样做:

 "My object has strings a={a}, b={b}, c={c}".format(**vars(obj))

有关为什么 vars()__dict__ 更可取的更多背景,请参阅问题 使用 dict 或 vars()? .

原文由 Geoffrey Hing 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题