如何更改方法实现而不将其更改为非静态

时间:2017-06-25 13:38:05

标签: python python-2.7 lambda static-methods

例如:

class a:
    @staticmethod
    def aaa():
        print 'a'

a.aaa()
a.aaa = lambda: raise ValueError('a')
a.aaa()

第二次python引发了一个错误,我没有将类a的实例传递给方法。 如何在不删除静态属性的情况下更改实现?

1 个答案:

答案 0 :(得分:0)

直接调用staticmethod装饰器

class a:
    @staticmethod
    def aaa():
        print 'a'

a.aaa()
# decorate the lambda expression with staticmethod
a.aaa = staticmethod(lambda: 'a')
a.aaa()

这基本上就是你在使用装饰器时所做的事情。

请注意,您无法raise错误直接,因为raise语句,而不是表达式。但是你可以use some tricks to raise an exception in a lambda expression