我想实现一个函数,比如说“foo”,这样就可以按如下方式输入参数:
foo“test”,或foo<< “test”,...,即没有括号,而不是明确地调用foo(“test”),就像我们调用内置函数“print”一样。
任何人都知道解决方案/提示?
感谢。
答案 0 :(得分:3)
在Python2中,print
不是函数,它是一个语句,因此它可以打破常规规则。
但是,您可以使用__lshift__
和__rshift__
方法
class X(object):
def __lshift__(self, n):
print "<< "*n
def __rshift__(self, n):
print ">> "*n
这些方法可以做任何你喜欢的事情
>>> X() << 5
<< << << << <<
>>> X() >> 10
>> >> >> >> >> >> >> >> >> >>
所以你可以像这样模拟你的主叫想法
class X(object):
def __call__(self, *args, **kw):
print "called with ", args, kw
def __lshift__(self, n):
return self(n)
这并不是一个好主意,但有时候玩这样的事情会产生好的想法