我有一个通常接受列表的函数,但有时也需要接受函数。有几种方法可以解决这个问题,但对于给定函数len(foo)
能够foo
能够非常有用。
最后,我传入了可定义__len__
函数的可调用类,而不是传入函数。但它让我思考,因为在python中,一切都是一个对象,函数可以具有属性等,就像一个好奇心......
问题
有没有办法给一个len一个函数?一个快速的谷歌没有带来任何东西。
我的尝试
def foo():
return True
def my_len(self):
return 5
foo.__len__ = my_len
len(foo)
答案 0 :(得分:3)
向对象添加__len__
不起作用(请参阅Aran-Fey添加的link为什么)。函数只是定义__call__
方法的对象。您可以定义这样的类:
class Foo:
def __call__(self):
return True
def __len__(self):
return 5
使用它:
>>> foo=Foo()
>>> foo()
True
>>> len(foo)
5
可以创建一个具有length
的函数,但您应该考虑用例。 Python为你提供了很多力量,但并不是所有可能的东西都是一个好主意。