บรรทัดหลามที่ขึ้นต้นด้วย @ [ซ้ำกัน]

สิ่งที่ซ้ำกันที่เป็นไปได้:
ทำความเข้าใจกับตัวตกแต่ง Python

ฉันกำลังอ่านซอร์สโค้ดของแอป django ที่ฉันพบสิ่งนี้

@login_required
def activities(request = None,\
            project_id = 0,\
            task_id = 0,\
            ...

บรรทัดที่ขึ้นต้นด้วย @ หมายถึงอะไร


person Augie    schedule 15.07.2011    source แหล่งที่มา
comment
stackoverflow.com/questions/739654/   -  person Andreas Jung    schedule 15.07.2011
comment
+1 เพราะเป็นคำถามที่ถูกต้อง เพราะคุณไม่รู้ว่าคุณต้องค้นหาผู้ตกแต่งเมื่อคุณเห็นสัญลักษณ์ @ ในครั้งแรก   -  person Framester    schedule 23.04.2015
comment
สิ่งที่ซ้ำกันที่ถูกต้องก็คือ stackoverflow.com/questions/6392739/   -  person Framester    schedule 23.04.2015


คำตอบ (4)


โปรดดู คำอธิบายของ Python Decorators มีคำตอบที่น่าทึ่งที่จะอธิบายทุกอย่าง

person TorelTwiddler    schedule 15.07.2011

มันเป็นมัณฑนากร. โดยพื้นฐานแล้วมันทำหน้าที่อะไร มันเทียบเท่ากับรหัสนี้:

def activities(request = None,\
            project_id = 0,\
            task_id = 0,\
            ...
activities = login_required(activities)

ใช้เพื่อตรวจสอบอาร์กิวเมนต์ของฟังก์ชัน (ในกรณีนี้คือ request.session) การแก้ไขอาร์กิวเมนต์ (อาจทำให้ฟังก์ชันมีอาร์กิวเมนต์อื่นนอกเหนือจากที่ส่งผ่าน) และอาจเป็นอย่างอื่นด้วย

person Gabi Purcaru    schedule 15.07.2011

เป็นมัณฑนากรซึ่งเป็นฟังก์ชันชนิดพิเศษ (หรือคลาสในบางกรณี) ใน Python ที่ปรับเปลี่ยนพฤติกรรมของฟังก์ชันอื่น ดูบทความนี้

@decorator
def my_func():
    pass

เป็นเพียงไวยากรณ์พิเศษสำหรับ

def my_func():
    pass
my_func = decorator(my_func)
person Rafe Kettler    schedule 15.07.2011

มันเป็นช่างตกแต่ง มันเป็นน้ำตาลสังเคราะห์สำหรับ:

def activities(request = None,\
            project_id = 0,\
            task_id = 0,\
            ...

activities = login_required(activities)
person utdemir    schedule 15.07.2011