gpt4 book ai didi

python - 使用 dict vs class __dict__ 方法来格式化字符串

转载 作者:行者123 更新时间:2023-11-28 19:59:08 25 4
gpt4 key购买 nike

我一直在用dict格式化字符串

s = '%(name1)s %(name2)s'
d = {}
d['name1'] = 'asdf'
d['name2'] = 'whatever'
result = s % d

我刚刚意识到我可以用一个类并使用 dict 方法来做到这一点相反:

s = '%(name1)s %(name2)s'
class D : pass
d = D()
d.name1 = 'asdf'
d.name2 = 'whatever'
result = s % d.__dict__

(显然我这样做是为了更大的字符串和更多的键)。

我忽略了类方法有什么缺点吗?或者是否有更好的方法来进行我所缺少的这种字符串格式化?

谢谢。

最佳答案

您可以使用新式格式化,它允许在格式字符串中使用 getattr 和 getitem 运算符:

>>> class X(object):
... pass
...
>>> x = X()
>>> x.x = 1
>>> d = {'a':1, 'b':2}
>>> "{0[a]} {0[b]} {1.x}".format(d, x)
'1 2 1'

关于您的方法的缺点 - 对象的 __dict__ 仅限于特定实例具有的任何属性和方法,因此在类级别定义的任何属性/方法都将失败:

>>> class X(object):
... x1 = 1
...
>>> x = X()
>>> x.x2 = 2
>>> x.__dict__
{'x2': 2}
>>> x.x1
1
>>> x.__dict__['x1']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'x1'

它也不适用于 __slots____getattribute__ 覆盖。

关于python - 使用 dict vs class __dict__ 方法来格式化字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5921901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com