Python 对象的字符串替换(非字典)

Python 对象的字符串替换(非字典),python,string,Python,String,Python有一种很好的方法可以使用字典进行字符串替换。 如何在自己的对象中复制相同的行为(而不是使用字典) 例如,如果我有一个类MyClass: In [3]: class MyClass(): a = 'x' b = 'y' In [4]: m = MyClass() 在没有任何映射的情况下,我们希望字符串替换会抛出错误(他们确实会这样做),但假设我希望它的行为类似于{'a':'x'},即返回以下'x': 我一直在胡闹,或者没有成功 如何提

Python有一种很好的方法可以使用字典进行字符串替换。
如何在自己的对象中复制相同的行为(而不是使用字典)

例如,如果我有一个类
MyClass

In [3]: class MyClass():
            a = 'x'
            b = 'y'

In [4]: m = MyClass()
在没有任何映射的情况下,我们希望字符串替换会抛出错误(他们确实会这样做),但假设我希望它的行为类似于
{'a':'x'}
,即返回以下
'x'

我一直在胡闹,或者没有成功

如何提供我的类a“映射”(字典?)以用于字符串替换?

您的
MyClass()
实例确实有一个与之关联的字典,请通过以下方式访问它:

这适用于所有不使用
\uuuu slots\uuu
属性的自定义类

或者,您可以使用更新的,它允许您访问对象属性:

'{0.a}'.format(m)
正是这种格式化方法在自定义类上查找
。\uuuuuuuuuuuuuuuuuuuuuuu格式(format\uspec)
方法,请参阅

最后但并非最不重要的一点是,任何具有的对象都可以用于字符串格式设置,就像它是字典一样:

>>> class Foo(object):
...     def __getitem__(self, name):
...         if name == 'bar': return 'baz'
...         raise AttributeError(name)
... 
>>> '%(bar)s' % Foo()
'baz'

你用
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu格式
尝试了什么?您可以将其与
'.format()
字符串方法或
format()
函数一起使用,以及我建议您使用的内容。此外,我假设您需要在那里键入
m=MyClass()
。@MartijInputers是的,谢谢您发现了这个错误!我曾尝试将其作为字典添加到MyClass中,正如我在库中看到的那样。。。我想我需要探索一些其他库(具有此功能)的源代码。除非类具有
\uuuuu插槽\uuuuuu
,否则不能使用语法
'%(a)s%m
?这就是我试图模仿的行为?我真的希望自己能够定义这个映射(而不仅仅是让它成为所有的属性)…@AndyHayden:这是可能的,很抱歉没有完全理解您的问题。修改以显示如何。谢谢,这就是我错过的!注意:我想要有特定行为的原因是为了理解/修复这个问题。奇怪的是,在这种情况下,您可以访问
m['x']
(通过
\uu getitem\uuuuuuuu
),但是
'%(x)s'%m
:s有相同的错误
'%(a)s' % vars(m)
'{0.a}'.format(m)
>>> class Foo(object):
...     def __getitem__(self, name):
...         if name == 'bar': return 'baz'
...         raise AttributeError(name)
... 
>>> '%(bar)s' % Foo()
'baz'