如何在Python中将对象的方法转换为字符串?

2024-10-04 01:27:45 发布

您现在位置:Python中文网/ 问答频道 /正文

如何使一个对象返回在对象名之后的字符串

a = AnyMethodToString()
print(a.b.c[1].d["e"].f)
=> 'b.c[1].d["e"].f'

Tags: 对象字符串printanymethodtostring
1条回答
网友
1楼 · 发布于 2024-10-04 01:27:45

有趣的挑战是,这可以通过使用__getattr____getitem__方法编写一个类来实现。为了简单起见,我将变量s作为闭包的一部分,而不是属性,否则self.s可能会模糊地引用字符串或__getattr__方法

为了获得额外的积分,__call__方法也允许您将方法调用放入其中

def magic(s=''):
    class Magic:
        def __str__(self):
            return s
        def __repr__(self):
            return s
        def __getattr__(self, i):
            return magic('{0}.{1}'.format(s, i).lstrip('.'))
        def __getitem__(self, i):
            return magic('{0}[{1!r}]'.format(s, i))
        def __call__(self, *args, **kwargs):
            a = [repr(x) for x in args]
            a += ['{0}={1!r}'.format(k, x) for k, x in kwargs.items()]
            return magic('{0}({1})'.format(s, ', '.join(a)))
    return Magic()

用法:

>>> a = magic('a')
>>> a.b
a.b
>>> a.b.c
a.b.c
>>> a.b.c[1].d["e"].f
a.b.c[1].d['e'].f
>>> a.foo('bar', baz=4)
a.foo('bar', baz=4)

或者没有a.部分:

>>> a = magic()
>>> a.b
b
>>> a.b.c
b.c
>>> a.b.c[1].d["e"].f
b.c[1].d['e'].f
>>> a.foo('bar', baz=4)
foo('bar', baz=4)

相关问题 更多 >