برنامه نویسی

راهنمای عملی فرابرنامه نویسی در پایتون

فرابرنامه نویسی چیست؟

فرابرنامه‌نویسی یک تکنیک برنامه‌نویسی است که در آن یک برنامه می‌تواند کد را در زمان اجرا تغییر داده یا تولید کند. این به توسعه دهندگان اجازه می دهد تا کدی بنویسند که می تواند کدهای دیگری را تجزیه و تحلیل، اصلاح یا ایجاد کند.

به عبارت دیگر، فرابرنامه‌نویسی راهی برای نوشتن برنامه‌هایی است که برنامه‌ها را دستکاری می‌کنند.

فرابرنامه‌نویسی در بسیاری از زبان‌ها از جمله پایتون، جاوا اسکریپت، روبی، کلوژور، جولیا و جاوا پشتیبانی می‌شود (اگرچه زبان بسیار ثابت و پرمخاطب در نظر گرفته می‌شود!)

راهنمای عملی فرابرنامه نویسی در پایتون” loading=”lazy” width=”664″ height=”557″/>

شکل: رابطه بین مفاهیم ساختاری و فرآیندی فرابرنامه ریزی. تصویر از گیت تحقیق

فرابرنامه نویسی کجا استفاده می شود؟

فرابرنامه‌نویسی برای بسیاری از موارد مفید است. برخی از آنها عبارتند از

  • چارچوب ها و کتابخانه ها
  • تولید کد
  • موتورهای قالب

فرابرنامه نویسی در پایتون

فرابرنامه‌نویسی در پایتون به شما امکان می‌دهد کدی بنویسید که بتواند خود کد را دستکاری کند، کد جدید ایجاد کند، کد موجود را تغییر دهد یا ساختار کد را تجزیه و تحلیل کند. پایتون مکانیسم های مختلفی را برای فرابرنامه نویسی ارائه می دهد. بیایید هر یک از آنها را با مثال کد بررسی کنیم:

1. دکوراتورها

دکوراتورها عملکردهایی هستند که رفتار سایر عملکردها یا کلاس ها را تغییر می دهند. آنها تابع یا کلاس هدف را بسته بندی می کنند و عملکرد اضافی را ارائه می دهند. دکوراتورها از علامت @ استفاده می کنند و می توانند برای توابع یا کلاس ها اعمال شوند. در اینجا یک مثال است:

def uppercase_decorator(func):
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        return result.upper()
    return wrapper

@uppercase_decorator
def greet(name):
    return f"Hello, {name}!"

print(greet("Karishma"))
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خروجی

HELLO, KARISHMA!
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در مثال بالا، uppercase_decorator رفتار را تغییر می دهد greet تابع با تبدیل مقدار بازگشتی آن به حروف بزرگ.

2. متاکلاس ها

متاکلاس ها به شما این امکان را می دهند که رفتار کلاس ها را تعریف کنید. آنها به عنوان طرح اولیه برای ایجاد کلاس ها عمل می کنند و می توانند ایجاد و رفتار کلاس را تغییر دهند. در اینجا یک مثال است:

class MetaClass(type):
    def __new__(cls, name, bases, attrs):
        uppercase_attrs = {key.upper(): value for key, value in attrs.items() if not key.startswith('__')}
        return super().__new__(cls, name, bases, uppercase_attrs)

class MyClass(metaclass=MetaClass):
    message = "Hello, World!"

print(MyClass.MESSAGE)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خروجی

Hello, World!
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در مثال بالا، MetaClass متاکلاس ویژگی های the را تغییر می دهد MyClass کلاس با تبدیل آنها به حروف بزرگ.

3. کارکرد و کلاس دکوراتور

علاوه بر استفاده از دکوراتورها با نماد @، می توانید دکوراتورها را با استفاده از تابع یا نحو کلاس نیز اعمال کنید. در اینجا یک مثال است:

class CubeCalculator:
    def __init__(self, function):
        self.function = function

    def __call__(self, *args, **kwargs):

        # before function
        result = self.function(*args, **kwargs)

        # after function
        return result

# adding class decorator to the function
@CubeCalculator
def get_cube(n):
    print("Input number:", n)
    return n * n * n

print("Cube of number:", get_cube(100))
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خروجی

Input number: 100
Cube of number: 1000000
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در مثال بالا یک کلاس دکوراتور را تعریف می کنیم CubeCalculator که تابع را می پیچد get_cube برای انجام اقدامات اضافی قبل و بعد از اجرای آن و سپس اعمال دکوراتور به get_cube تابع. چه زمانی get_cube با یک عدد ورودی فراخوانی می شود، عدد ورودی را چاپ می کند، مکعب آن را محاسبه می کند و نتیجه را برمی گرداند.

4. تولید کد پویا

پایتون به شما اجازه می دهد تا با استفاده از تکنیک هایی مانند eval() یا exec() کد را به صورت پویا تولید کنید. این می تواند برای تولید کد بر اساس شرایط خاص یا ایجاد پویا توابع یا کلاس ها مفید باشد. در اینجا یک مثال است:

name = "Karishma"
age = 2

code = f'def greet():\n    print("Name: {name}")\n    print("Age: {age}")'

exec(code)
greet()
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در مثال بالا، رشته کد به صورت پویا تولید و با استفاده از آن اجرا می شود exec() برای تعریف تابع سلام.

رایج ترین کلمات کلیدی داخلی و توابع برای فرابرنامه نویسی در پایتون

در پایتون، کلمات کلیدی و مفاهیم زیر معمولاً با فرابرنامه‌نویسی مرتبط هستند و پایه و اساس فرابرنامه‌نویسی را فراهم می‌کنند:

  1. getattr()، dir()، hasattr(): این توابع به شما این امکان را می دهند که به صورت پویا ویژگی های یک شی را در زمان اجرا دریافت و تنظیم کنید. ساخته شده در inspect ماژول مسئول مفهوم مهم فرابرنامه نویسی به نام درون نگری است که در آن برنامه به سادگی به خود نگاه می کند و گزارش می دهد.

  2. exec()، eval() و compile(): این توابع امکان اجرای رشته های کد تولید شده به صورت پویا یا ارزیابی عبارات را فراهم می کنند.

  3. __getattr__() و __setattr__(): این متدهای ویژه را می توان در کلاس ها تعریف کرد تا دسترسی و تخصیص ویژگی ها را به صورت پویا انجام دهد.

  4. __metaclass__: این ویژگی خاص را می توان در تعریف کلاس برای تعیین متاکلاس برای آن کلاس استفاده کرد.

نتیجه

اینها برخی از راه‌های دستیابی به فرابرنامه‌نویسی در پایتون هستند. هر تکنیک انعطاف پذیری را در دستکاری ساختارها و رفتار کد فراهم می کند و شما را قادر می سازد تا برنامه های کاربردی پویا و انعطاف پذیرتری ایجاد کنید.


اگر مطالبی را که می خوانید دوست دارید، در خبرنامه من مشترک شوید.
مرا در GitHub پیدا کنید، توییتر

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا