在python中定义@classmethod lambda

Ank*_*wal 1 python lambda

class TestClass(object):
    aa = lambda x: 35
    def __init__(self):
        self.k = self.aa()


o = TestClass()
print o.k
Run Code Online (Sandbox Code Playgroud)

这给了我35,我理解为什么.

但是这个:

class TestClass(object):
    @classmethod
    aa = lambda x: 35
    print type(aa)
    def __init__(self):
        self.k = TestClass.aa()


o = TestClass()
print o.k
Run Code Online (Sandbox Code Playgroud)

这给了我

  File "test1.py", line 3
    aa = lambda x: 35
     ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

为什么这样 ?

Bre*_*arn 6

装饰只在语法上是有效的defclass陈述.但是装饰器语法只是用装饰函数(或类)作为参数调用装饰器的简写,所以你可以用以下方法实现相同的结果:

class TestClass(object):
    aa = classmethod(lambda x: 35)
    # etc.
Run Code Online (Sandbox Code Playgroud)