python map like object包含lambda函数

时间:2014-01-29 14:00:49

标签: python lambda

我尝试创建包含lambda函数的对象的映射:

class Map(object):
    a = lambda x: True

但是python假设aMap类方法,并期望接受self参数为Map实例。

当然我可以写

class Map(object):
    @staticmethod
    def a(x):
       return True

但它太长了。 是否有可能成为第一堂课?

2 个答案:

答案 0 :(得分:4)

是的,只需手动将@staticmethod装饰器应用于lambda

class Map(object):
    a = staticmethod(lambda x: True)

或者只是提供您需要lambda参数的self

class Map(object):
    a = lambda self, x: True

答案 1 :(得分:0)

目前还不清楚你在问什么。第一段代码正确执行了它应该执行的操作 - 它将该函数设置为a的属性Map

Map.a(42)
  

但是python假设一个Map类方法

Python不“假设”它是一个“类方法”。它不是“阶级方法”。在class声明的正文中设置的所有变量都成为该类的成员。你有什么期待?

“类方法”是指具有@classmethod装饰器的东西。这不同于@staticmethod装饰器的东西,也不同于没有装饰器的东西。原样,它既不是“类方法”也不是“静态方法”。你需要了解这三者之间的差异。

@staticmethod装饰器仅在您尝试在Map实例上调用方法时受到影响。你没有说你做过这样的事情。直接访问类的属性并调用它时,没有区别。