Decorators in Python

က်ြန္ေတာ္တုိ့ ဒီေန့ေတာ့ python decorators ကုိ လုိရင္းပဲေျပာသြားပါမယ္။အဲ့ေတာ့ python decorators ေတြကုိနားလည္ဖုိ့ဆုိ python function ေတြအလုပ္လုပ္ပုံကုိသိထားသင့္ပါတယ္။က်ြန္ေတာ္တုိ့ decorator ဆုိတာက function တစ္ခုကုိ သူ့ထဲကုိ ေခါ္လုိက္ျပီး အဲ့function ရဲ့ အလုပ္လုပ္ပုံကုိ ထပ္ျပီးျပင္ဆင္လုိ့ရေအာင္လုပ္တာပါ။နည္းနည္းရွုပ္သြားမလား။

ဥပမာ က်ြန္ေတာ္တုိ့ function က Hello World လုိ့ထုတ္ေပးတယ္ဆုိ Hello World.How are you?လုိ့ အလုိလုိေျပာင္းသြားေအာင္ လုပ္ေပးနုိင္ပါတယ္။function ရဲအလုပ္ကုိ ျပင္ဆင္လုိ့ရတယ္လုိ့ဆုိလုိတာပါ။ေအာက္က example ကုိၾကည္လုိက္ပါ။

က်ြန္ေတာ္တုိ့ ဒီမွာ my_decorator ဆုိတဲ့ decorator ကုိေၾကညာထားပါတယ္။သူ့အထဲက wrap function ကေတာ့ က်ြန္ေတာ္တုိ့ပုိ့ေပးလုိက္မယ့္ functionပါ။က်ြန္ေတာ္ေျပာခဲ့သလုိ function ေတြကုိ modify လုပ္ေပးလုိ့ရတယ္ဆုိမွေတာ့ အဲ့function ကိုထည့္ေပးလုိက္မွအဆင္ေျပမွာပါ။သူ့ေအာက္က do_decorator_functionကေတာ့ decorator ထဲမွာပဲ အလုပ္လုပ္တာပါ။အဲ့ေတာ့ အေပါ္က example ကိုrunလုိက္ရင္ function ရဲ့ output ျဖစ္တဲ့ Hello World ကိုပဲေတြ့ရမွာပါ။

က်ြန္ေတာ္တုိ့ decorator ကိုေအာက္ကတုိင္း ထည့္ေပးလုိက္မယ္ဆုိရင္ေတာ့

@my_decorator ေလးက မိတ္ေဆြရဲ့ ေအာက္က function ကုိ wrap လုပ္လုိက္ျပီး  wrap_function ထဲေရာက္သြားပါတယ္။အဲ့ေတာ့မွ do_decorator_function  ကအလုပ္လုပ္ျပီး str(wrap_function())  လုိ့ေခါ္လုိက္ေတာ့ နဂုိ function ကျပန္ျပီး Hello Worldကုိ {} ထဲကုိထည့္ေပးလုိက္ပါတယ္။return ကေတာ့ decorator ထဲမွာမုိ့ သူ့ရဲံအလုပ္လုပ္တဲ့ function ျဖစ္တဲ့ do_decorator_function ကိုျပန္ေပးလုိက္တာပါ။ဒါေလးပါပဲ။

က်ြန္ေတာ္တို့ ဥပမာ decorator ထဲကုိ argumentေတြထည့္ေပးခ်င္တယ္ဆုိရင္လဲ

ဒါကေတာ့နားလည္ေနေလာက္ျပီထင္ပါတယ္။*args,**kwargs ထည့္ေပးလုိက္တာနဲ့ အဆင္ေျပပါတယ္။4 က ေရာက္သြားျပီး 4*4 ပုံစံျဖစ္သြားလုိ့ေျမွာက္ျပီးျပန္ပုိေ့ပးတာပါ။

လက္ရွိ python micro webframworkျဖစ္တဲ့ flask တုိ့မွာလဲ တြင္တြင္က်ယ္က်ယ္ သုံးေနက်ပါတယ္။တကယ္အသုံး၀င္တာမုိ့ တင္ေပးလုိက္တာပါ။Flask ကိုၾက္ည့မယ္ဆုိ သူ့ရဲ့ routing ကို decorators နဲ့ထိန္းထားပါတယ္။

အဲ့ေတာ့ ‘/home/’ ဆုိတာေလးထည့္လုိ့ရေအာင္ဘယ္လုိေရးထားတာလဲကုိ ဆက္ျပီးၾက္ည့ရေအာင္

ဒီလုိပုံစံေလးပါပဲ ေနာက္တစ္ဆင့္ေလးပဲတုိးသြားတာပါ။return squareတို့ ျပန္ေပးရတာေလးပါပဲ။အားလုံးနားလည္မယ္ထင္ပါတယ္ code ၾကည့္လုိက္ယံုနဲ့ ေက်းဇူးတင္ပါတယ္။

if you have any questions,plz let me know!

Share:
Tags:

Leave a Reply