如何在类中使用lambda作为方法?

2024-03-28 12:04:16 发布

您现在位置:Python中文网/ 问答频道 /正文

这就是我要做的

class BaseClass(object):
    successify = lambda x: "<Success>%s</Success>" % x
    errorify = lambda x: "<Error>%s</Error>" % x
    def try1(self):
        print successify("try1")
    def try2(self):
        print self.successify("try2")

但这两种方法都不管用。。

>>> BaseClass().try1()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in try1
NameError: global name 'successify' is not defined
>>> BaseClass().try2()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 7, in try2
TypeError: <lambda>() takes exactly 1 argument (2 given)

如何在类中使用lambdas作为方法?


Tags: 方法lambdainselfdefstdinlineerror
3条回答

使用lambda self, x: "...%s..." % x

使用/访问lambdas的类变量的可能性很小。其中三个是:

class BaseClass(object):
    successify = lambda x: "<Success>%s</Success>" % x
    errorify = lambda x: "<Error>%s</Error>" % x
    def try1(self):
        print(self.__class__.successify("try1"))
    def try2(self):
        print(self.__class__.successify("try2"))

 # or 

class BaseClass(object):
    successify = lambda x: "<Success>%s</Success>" % x
    errorify = lambda x: "<Error>%s</Error>" % x
    def try1(self):
        print(BaseClass.successify("try1"))
    def try2(self):
        print(BaseClass.successify("try2"))

# or Please not changes to lambda definitions below

class BaseClass(object):
    successify = lambda self,x: "<Success>%s</Success>" % x
    errorify = lambda self,x: "<Error>%s</Error>" % x
    def try1(self):
        print(self.successify("try1"))
    def try2(self):
        print(self.successify("try2"))    

如果您想作为对象函数访问successify,那么第一个参数是self,表示对象实例。

如果必须使用self.successify,则必须更改lambada函数

successify = lambda self, x: "<Success>%s</Success>" % x

相关问题 更多 >