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()
有趣的挑战是,这可以通过使用
__getattr__
和__getitem__
方法编写一个类来实现。为了简单起见,我将变量s
作为闭包的一部分,而不是属性,否则self.s
可能会模糊地引用字符串或__getattr__
方法为了获得额外的积分,
__call__
方法也允许您将方法调用放入其中用法:
或者没有
a.
部分:相关问题 更多 >
编程相关推荐