الزخارف في بايثون

طبعاً الترجمة الحرفية هي زخرفة لكن المقصود هنا هي إضافة تسبق الدالة function أو الصنف class لكي تضيف إلى عمله أثناء التشغيل إضافة جديدة تتكامل مع العمل الأصلي للدالة أو الصنف و هي في ذلك تشبه الماكرو في بعض اللغات الأخرى و إلى حد ما تشبه annotations في جافا و سي شارب.

كمثال كيف يمكننا عمل الآتي, لاحظ أن الدالة الأصلية تعيد كلمة “Hello” بدون وسوم, و بإضافة الزخارف أعلى الدالة أضيفت الوسوم للكلمة المرتجعة من الدالة.

 
@makebold
@makeitalic
def say():
   return "Hello"

ناتج الدالة: هو طباعة <b><i>Hello</i></b>

الزخارف @makebold و @makeitalic ماهي إلا دوال معرفة مسبقا:

def makebold(fn):
    def wrapped():
        return "&lt;b&gt;" + fn() + "&lt;/b&gt;"
    return wrapped

def makeitalic(fn):
    def wrapped():
        return "&lt;i&gt;" + fn() + "&lt;/i&gt;"
    return wrapped

@makebold
@makeitalic
def hello():
    return "hello world"

print hello() ## returns &lt;b&gt;&lt;i&gt;hello world&lt;/i&gt;&lt;/b&gt;</pre>
للإستزادة يمكنك قراْة هذه المقالة: