python, آموزش قدم به قدم پایتون, پایتون

سربارگذاری عملگرها در پایتون (Overloading operators)

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


یکی از ویژگی‌های جالب و قدرتمند زبان برنامه‌نویسی پایتون، توانایی سربارگذاری (Overloading) عملگرها است. این ویژگی به برنامه‌نویسان این امکان را می‌دهد که عملگرهای معمولی مانند +، -، * و … را برای انواع داده‌های خود تعریف کرده و رفتار آنها را تغییر دهند. در این مقاله، با مفهوم سربارگذاری عملگرها در پایتون آشنا می‌شویم و نحوه استفاده از آن را در برنامه‌نویسی با این زبان مطالعه خواهیم کرد. پیشنهاد می‌کنیم در ادامه از دیگر آموزش‌های ما نیز دیدن فرمایید:

مفهوم Overloading عملگرها

سربارگذاری عملگرها به معنای تعریف مجدد عملگرهای معمولی در زبان‌های برنامه‌نویسی است. با این کار، می‌توانید عملگرهایی که در اصل برای نوع‌های داده‌ خاصی تعریف شده‌اند، برای نوع‌های داده‌ای دلخواه خود تعریف کنید. به عبارت دیگر، می‌توانید رفتار یک عملگر را برای انواع مختلف داده‌ها مشخص کنید.

به عنوان مثال، در بسیاری از زبان‌ها، عملگر + برای جمع دو عدد عمل می‌کند. اما در پایتون، شما می‌توانید عملگر + را برای انجام عملیات‌های دلخواهی مانند جمع دو عدد صحیح، اتصال دو رشته، یا حتی جمع دو ماتریس تعریف کنید.

سربارگذاری عملگر جمع (+) در پایتون

برای تعریف سربارگذاری عملگرها در پایتون، شما باید از متد‌های خاص (Special Methods) که با دو خط تیره از هر دو طرف نام آنها مشخص می‌شوند، استفاده کنید. برای مثال، برای سربارگذاری عملگر جمع + برای یک کلاس خاص، باید متد __add__ را در آن کلاس تعریف کنید.

class MyClass:
    def __init__(self, value):
        self.value = value

    def __add__(self, other):
        result = self.value + other.value
        return MyClass(result)

# ایجاد دو نمونه از کلاس MyClass
obj1 = MyClass(10)
obj2 = MyClass(20)

# استفاده از اورلود عملگر جمع برای این دو نمونه
result = obj1 + obj2
print(result.value)  # خروجی: 30

در این مثال، متد __add__ در کلاس MyClass تعریف شده است. این متد دو مقدار را به عنوان پارامتر دریافت می‌کند (خود کلاس و مقدار دیگر) و عمل جمع را انجام می‌دهد. در خروجی نمونه‌ای جدید از کلاس MyClass را ایجاد و باز می‌گرداند.

حالا می‌توانیم این سربارگذاری شده به عنوان عملگر جمع برای دو نمونه از کلاس MyClass استفاده کنیم و نتیجه را در متغیر result ذخیره کرده و چاپ کنیم.

سربارگذاری عملگرهای دیگر

علاوه بر عملگر جمع +، در پایتون می‌توانید عملگرهای دیگری مانند *، -، /، == و … را نیز برای کلاس‌های خود سربارگذاری کنید. برای هر عملگر، متد مخصوصی وجود دارد که باید در کلاس‌های خود تعریف کنید. به عنوان مثال:

  • برای عملگر ضرب *، متد __mul__ را تعریف کنید.
  • برای عملگر تفریق -، متد __sub__ را تعریف کنید.
  • برای عملگر تقسیم /، متد __truediv__ را تعریف کنید.
  • برای عملگر برابری ==، متد __eq__ را تعریف کنید.
class MyClass:
    def __init__(self, value):
        self.value = value

    def __add__(self, other):
        result = self.value + other.value
        return MyClass(result)

    def __mul__(self, other):
        result = self.value * other.value
        return MyClass(result)

# ایجاد دو نمونه از کلاس MyClass
obj1 = MyClass(5)
obj2 = MyClass(3)

# استفاده از اورلود عملگر جمع و ضرب برای این دو نمونه
result1 = obj1 + obj2
result2 = obj1 * obj2

print(result1.value)  # خروجی: 8
print(result2.value)  # خروجی: 15

سربارگذاری عملگرها در انواع داده‌ای دلخواه

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

class ComplexNumber:
    def __init__(self, real, imag):
        self.real = real
        self.imag = imag

    def __add__(self, other):
        real_result = self.real + other.real
        imag_result = self.imag + other.imag
        return ComplexNumber(real_result, imag_result)

    def __sub__(self, other):
        real_result = self.real - other.real
        imag_result = self.imag - other.imag
        return ComplexNumber(real_result, imag_result)

    def __str__(self):
        return f"{self.real} + {self.imag}i"

# ایجاد دو نمونه از کلاس ComplexNumber
num1 = ComplexNumber(3, 2)
num2 = ComplexNumber(1, 7)

# استفاده از اورلود عملگرهای جمع و تفریق برای این دو نمونه
result_add = num1 + num2
result_sub = num1 - num2

print(result_add)  # خروجی: "4 + 9i"
print(result_sub)  # خروجی: "2 - 5i"

در این مثال، یک کلاس به نام ComplexNumber برای مدل‌سازی اعداد مختلط تعریف شده است. سربارگذاری عملگرهای + و - برای انجام عملیات‌های جمع و تفریق دو عدد مختلط تعریف گردیده است. همچنین، متد __str__ برای نمایش مقادیر عدد مختلط به شکل معمولی ارائه گردیده است.

نکات مهم در استفاده از Overloading عملگرها

  • در استفاده از سربارگذاری عملگرها، باید توجه داشته باشید که عملگرهای اصلی برای نوع‌های داده‌ای استاندارد (string، integer و …) به صورت پیش‌فرض وجود دارند. بنابراین، برای انواع داده‌ای جدیدی که تعریف می‌کنید، از نام‌ عملگرها و متدهای مخصوص استفاده کنید تا کاربران نیازی به یادگیری عملگرهای جدید نداشته باشند.
  • در سربارگذاری عملگرها، ممکن است نیاز به بررسی و اعتبارسنجی پارامترها داشته باشید تا از نوع و مقدار صحیح آنها مطمئن شوید.
  • سربارگذاری عملگرها به شما این امکان را می‌دهند که رفتار منطقی برای کلاس‌های خود تعریف کنید.
  • سربارگذاری عملگرها باید به شکل معقولی تعریف شوند تا کاربران بتوانند از آنها به راحتی استفاده کنند و رفتار ناخواسته را جلوگیری کنید

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

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

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