在python中定义@classmethod lambda

时间:2017-07-10 18:23:14

标签: python lambda

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


o = TestClass()
print o.k

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

但是这个:

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


o = TestClass()
print o.k

这给了我

  File "test1.py", line 3
    aa = lambda x: 35
     ^
SyntaxError: invalid syntax

为什么会这样?

2 个答案:

答案 0 :(得分:6)

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

class TestClass(object):
    aa = classmethod(lambda x: 35)
    # etc.

答案 1 :(得分:1)

你不能在lambda上使用装饰器。您可以用

替换它
from django.conf.urls import include, url
from django.contrib import admin
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = [
   url(r'^admin/', admin.site.urls),
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)