Python Decorators Complete Guide | Decorator Syntax in Hindi | Python Hindi
Python Decorators
Python में कई बार हमें किसी existing function का code बदले बिना उसमें extra behavior जोड़ना होता है — जैसे function चलने से पहले या बाद में कुछ extra काम करवाना। इसके लिए Python का Decorator concept इस्तेमाल होता है।
Decorator को समझने के लिए Functions को value की तरह treat करना, Function को argument की तरह pass करना, और Inner Functions जैसे concepts पहले से समझ लेना बहुत मदद करता है। अगर आपने अभी First Class Function in Python नहीं पढ़ा है, तो पहले वो article पढ़ना बेहतर रहेगा। Examples खुद run करने के लिए हमारा Online Python Editor & Compiler use कर सकते हैं।
Decorator क्या है?
Decorator Python का एक ऐसा feature है जिससे किसी existing function के code को बदले बिना, उसमें extra functionality जोड़ी जा सकती है।
सरल भाषा में — Decorator किसी function को "wrap" करके उसे नई क्षमता दे देता है, बिना उसके अंदर का code छेड़े।
Output:
Python Decorator की जरूरत क्यों पड़ती है?
मान लीजिए आपके पास कई functions हैं और आप चाहते हैं कि हर function के चलने का time log हो, या हर function call से पहले कोई check हो जाए। बिना decorator के आपको हर function के अंदर वही code बार-बार लिखना पड़ेगा।
- Code Repeat करने से बचाना — एक जैसी extra functionality कई functions में बार-बार नहीं लिखनी पड़ती
- Original Function को साफ रखना — main logic और extra behavior अलग-अलग रहते हैं
- Reusability — एक decorator को किसी भी function पर आसानी से apply किया जा सकता है
- Logging, Timing, Authentication जैसे common use cases — ये सब decorator से आसानी से संभव होते हैं
Function को Wrap करना
Decorator के पीछे का मुख्य idea है — एक function को किसी दूसरे function के अंदर "wrap" कर देना, ताकि original function चलने से पहले और बाद में extra code चल सके।
Output:
यहाँ simple_function को decorator() में pass किया गया, जिसने उसे wrapper() के अंदर wrap कर दिया।
Wrapper Function क्या है?
Wrapper Function वह inner function है जो decorator के अंदर define होता है और original function को call करने के साथ-साथ extra code भी चलाता है।
wrapper() ही वह जगह है जहाँ original function (func) call होता है, और उसके इर्द-गिर्द extra behavior जोड़ा जाता है।
@decorator Syntax
Function को manually decorator(function_name) लिखकर wrap करने की बजाय, Python एक shortcut syntax देता है — @decorator_name, जिसे function के ठीक ऊपर लिखा जाता है।
@my_decorator लिखना बिल्कुल greet = my_decorator(greet) लिखने जैसा ही है — बस पढ़ने और लिखने में आसान है।
@decorator_name हमेशा function definition के ठीक ऊपर, बिना किसी blank line के लिखा जाता है।
Decorator का Step-by-Step Execution Flow
Output:
Execution flow कुछ इस तरह चलता है:
Function से पहले Extra Code चलाना
Output:
Function के बाद Extra Code चलाना
Output:
Original Function को बिना बदले Extra Behavior जोड़ना
Decorator की सबसे बड़ी खूबी यही है कि original function का code बिल्कुल भी नहीं बदलता — सारी extra functionality decorator के अंदर रहती है।
Output:
show_message() का असली code बिल्कुल वैसा ही है — सिर्फ decorator की मदद से उसके चारों तरफ border जोड़ दिया गया।
Practical Example — Execution Time Measure करना
Output:
यह एक बहुत common real-world use case है — बिना slow_function() का code बदले, उसका execution time measure किया जा रहा है।
Practical Example — Arguments वाले Function पर Decorator
अगर original function arguments लेता है, तो wrapper function को भी वही arguments accept करने होंगे।
Output:
यहाँ *args और **kwargs का इस्तेमाल किया गया, ताकि decorator किसी भी number of arguments वाले function पर काम कर सके।
Common Decorator Mistakes
इससे original function का असली काम कभी execute ही नहीं होगा।
Exercise ?
Decorator के अंदर बना inner function, जो original function को call करता है, उसे क्या कहते हैं?
Coding Challenge
अब खुद अपने Online Python Editor में यह challenge solve कीजिए:
- एक decorator बनाइए जो किसी function के चलने से पहले
"Starting..."और बाद में"Finished!"print करे। - एक decorator बनाइए जो किसी function को सिर्फ 3 बार repeat करके चलाए।
- एक decorator बनाइए जो function का नाम print करे, फिर उसे call करे — यानी log करे कि कौन सा function चल रहा है।
- एक
divide(a, b)function बनाइए और उस पर एक decorator लगाइए जो check करे किbzero तो नहीं है, और अगर zero हो तो error message print करके function को call न करे। - पिछले
measure_timedecorator को इस्तेमाल करके किसी loop वाले function का execution time निकालिए।
Quick Revision
| Concept | Meaning |
|---|---|
| Decorator | किसी function में बिना उसका code बदले extra behavior जोड़ने वाला function |
| Wrapper Function | Decorator के अंदर का inner function, जो original function को call करता है |
@decorator_name | Decorator apply करने का shortcut syntax |
*args, **kwargs | Wrapper को किसी भी number of arguments accept करने देने के लिए |
FAQ
Python में Decorator क्या है?
Decorator एक ऐसा function है जो किसी दूसरे function को argument की तरह लेकर उसमें extra functionality जोड़ता है, बिना original function का code बदले।
@decorator_name syntax का क्या मतलब है?
यह function = decorator_name(function) लिखने का shortcut है — इसे function definition के ठीक ऊपर लिखा जाता है।
Wrapper Function क्यों जरूरी है?
Wrapper function वह जगह है जहाँ original function call होता है और उसके इर्द-गिर्द extra code (पहले और बाद में) चलाया जाता है। Decorator को हमेशा wrapper function return करना चाहिए।
Decorator में *args और **kwargs का इस्तेमाल क्यों होता है?
ताकि decorator किसी भी number of arguments लेने वाले function पर काम कर सके — बिना यह जाने कि उस function को कितने arguments चाहिए।
Decorator कहाँ इस्तेमाल होते हैं?
Logging, execution time measure करना, authentication check करना, caching, और किसी function को बार-बार run कराने जैसी situations में decorators बहुत common हैं।
Summary
Decorator = किसी function को बिना बदले, उसमें नई क्षमता जोड़ने का तरीका।
इस article में आपने सीखा कि Decorator क्या है, इसकी जरूरत क्यों पड़ती है, function को wrap करने का concept, Wrapper Function क्या होता है, @decorator syntax कैसे काम करता है, और decorator का execution flow कैसे चलता है। साथ ही, execution time measure करने और arguments वाले functions पर decorator लगाने जैसे practical examples भी देखे।
Decorators Python के सबसे powerful concepts में से एक हैं और real-world projects में logging, authentication, caching जैसी चीज़ों में बहुत इस्तेमाल होते हैं। अब ऊपर दिया गया coding challenge खुद अपने Online Editor में solve करें।
कोई टिप्पणी नहीं:
एक टिप्पणी भेजें