我经常使用ipython shell,并决定使一些简洁的包装函数更易于键入。目标是能够键入AnObject | dump
而不是dump(AnObject)
。这仅在ipython shell和dev中。为了更容易键入。
到目前为止,我已经提出了这个建议:
class _dump:
def __ror__(_, obj):
print(obj)
dump = _dump()
d = {'test': 123}
d | dump
输出{'test': 123}
一件小事让我烦恼。在定义后不初始化类的情况下,有没有办法做到这一点?另外,既可以接受| dump
样式也可以接受函数(| dump(opt=True)
)
答案 0 :(得分:2)
如果您愿意使用元类,则可以:
class ror(type):
@classmethod
def __ror__(cls, obj):
print(obj)
class Foo(metaclass=ror):
pass
'a' | Foo
# a
答案 1 :(得分:1)
class _dump:
def __init__(self, opt=False):
self.opt = opt
def __ror__(self, obj):
if self.opt:
print("Opt is TRUE!")
print(obj)
def __call__(self, *args, **kwds):
return _dump(*args, **kwds)
dump = _dump()
>>> 'a' | dump
a
>>> 'a' | dump(opt=True)
Opt is TRUE!
a