当前位置:  开发笔记 > 编程语言 > 正文

python中的类的Lambda函数?

如何解决《python中的类的Lambda函数?》经验,为你挑选了2个好方法。

必须有一个简单的方法来做到这一点,但不知何故,我可以绕过它.我可以描述我想要的最好的方法是一个类的lambda函数.我有一个库,希望作为一个参数,使用一个未经实例化的类.然后它实例化类本身以继续工作.问题是我希望能够动态创建类的版本,传递给库,但我无法弄清楚如何做到这一点,因为库需要一个未实例化的版本.下面的代码描述了问题:

class Double:
    def run(self,x):
        return x*2

class Triple:
    def run(self,x):
        return x*3

class Multiply:
    def __init__(self,mult):
        self.mult = mult
    def run(self,x):
        return x*self.mult

class Library:
    def __init__(self,c):
        self.c = c()
    def Op(self,val):
        return self.c.run(val)

op1 = Double
op2 = Triple
#op3 = Multiply(5)

lib1 = Library(op1)
lib2 = Library(op2)
#lib3 = Library(op3)

print lib1.Op(2)
print lib2.Op(2)
#print lib3.Op(2)

我不能使用通用的Multiply类,因为我必须首先实例化它,这会破坏库"AttributeError:Multiply instance has no call method".在不更改Library类的情况下,有没有办法可以做到这一点?



1> Deestan..:

库是否真的指定它需要"未初始化的版本"(即类引用)?

它看起来好像图书馆实际上想要一个对象工厂.在这种情况下,键入以下内容是可以接受的:

lib3 = Library(lambda: Multiply(5))

要了解lambda的工作原理,请考虑以下事项:

Multiply5 = lambda: Multiply(5)
assert Multiply5().run(3) == Multiply(5).run(3)



2> Parker Coate..:

根本不需要lambda.lambda只是合成糖来定义一个函数并同时使用它.就像任何lambda调用可以用显式def替换一样,我们可以通过创建满足您需求并返回它的真实类来解决您的问题.

class Double:
        def run(self,x):
            return x*2

class Triple:
    def run(self,x):
        return x*3

def createMultiplier(n):
    class Multiply:
        def run(self,x):
            return x*n
    return Multiply

class Library:
    def __init__(self,c):
        self.c = c()
    def Op(self,val):
        return self.c.run(val)

op1 = Double
op2 = Triple
op3 = createMultiplier(5)

lib1 = Library(op1)
lib2 = Library(op2)
lib3 = Library(op3)

print lib1.Op(2)
print lib2.Op(2)
print lib3.Op(2)

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有