Python __ror__无需初始化类

时间:2018-06-20 19:03:20

标签: python

我经常使用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)

2 个答案:

答案 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