LYTHON Telegram 59
Polymorphism in python

از مهم‌ترین بحث‌ها در شئ‌گرایی میشه به Polymorphism اشاره کرد. معنای این مفهوم یعنی که بتونیم از یک متد یکسان برای انواع آبجکت‌ها استفاده کنیم. کد زیر خودش گویاست.

text = 'Hello World'
numbers = [1, 2, 3]
print(len(text)) # 11
print(len(numbers)) # 3

براش مهم نیست که چه نوعی به عنوان ورودی می‌گیره. صرفا داره کار خودش رو می‌کنه چون برای جفت این کلاس‌ها متد len با توجه به نوع ورودی تعریف شده است و این همون چندریختی یا Polymorphism هستش. خب این قدرت پایتونه که انقدر خوب همه چیو داره هماهنگ می‌کنه.

اما در کل سه نوع روش پیاده سازی Polymorphism وجود دارد.
1- Method Overriding
2- Method Overloading
3- Operator Overloading
------------------------------
1-Method Overriding

فرض کنید که کلاس LittleFish از کلاس Animal ارث‌بری می‌کند. در این‌صورت خواهیم داشت.
class Animal:
def breathe(self):
print("I breathe oxygen.")

def feed(self):
print("I eat food.")

class LittleFish(Animal):
def feed(self):
print("I eat plankton.")

نکته‌های جالبی توی تکه کد بالاست. چون کلاس LittleFish از کلاس Animal ارث‌بری کرده پس متد feed جایگزین متد همنامی میشه که در کلاس والد موجوده. اما صرفا برای کلاس LittleFish به این شکل است و متد feed در کلاس LittleFish به اصطلاح Override شده است در مقایسه با متد feed در کلاس Animal. به کد زیر توجه کنید.
LittleFish().feed()   
# I eat plankton.
LittleFish().breathe()
# I breathe oxygen.
Animal().feed()
# I eat food.
اما همانطور که می‌بینید در سطح کلاس Animal هنوز متد feed همانی است که در آن تعریف شده‌است.

--------------------------
2-Method Overloading
حالا یه بحث دیگه‌ای داریم تحت این عنوان بالا.
این توی پایتون پشتیبانی نمیشه. فرض کنیم توی کلاس Animal یه متد دیگه تحت عنوان breath تعریف می‌کنیم‌. مثال زیر رو ببینید.
class Animal:
def breathe(self):
print('I breathe oxygen.')

def breathe(self):
print('I breathe O2 + N2.')

درواقع اگر در یک کلاس دو متد همنام تعریف کنیم با این که اروری برنمی‌گردد ولی صرفا دومی فعال خواهد شد. مهم نیست که متد چکاری انجام می‌دهد صرفا نام متد است که باعث تمایز بین متد‌ها می‌شود. همانطور که گفته شد این ویژگی در پایتون پشتیبانی نمی‌شود و متد اولی غیرفعال خواهد شد.

--------------------------
3- Operator Overloading
این ویژگی بسیار کاربردی و جالب است. درواقع این ویژگی اجازه می‌دهد که عملگرهای (+ - / و ... ) را برای کلاس های جدیدی که ایجاد می‌کنیم بازتعریف کنیم‌.
class Vector:
def __init__(self, x, y, z):
self.x = x
self.y = y
        self.z = z

def __add__(self, other):
x = self.x +other.x
y = self.y + other.y
z = self.z + other.z
return Vector(x, y, z)

درواقع متد add که تعریف کردیم برای این کلاس مثل جمع برداری عمل می‌کند. در واقع عملگر + را برای کلاس وکتور تعریف کردیم. باز هم کد گویای مفهوم هست.
Vec1 = Vector(1, 2 ,3)
vec2 = Vector(1, 1, 1)
vec_add = vec1 + vec2
vec_add.x # 2
vec_add.y # 3
vec_add.z # 4


@lython



tgoop.com/lython/59
Create:
Last Update:

Polymorphism in python

از مهم‌ترین بحث‌ها در شئ‌گرایی میشه به Polymorphism اشاره کرد. معنای این مفهوم یعنی که بتونیم از یک متد یکسان برای انواع آبجکت‌ها استفاده کنیم. کد زیر خودش گویاست.

text = 'Hello World'
numbers = [1, 2, 3]
print(len(text)) # 11
print(len(numbers)) # 3

براش مهم نیست که چه نوعی به عنوان ورودی می‌گیره. صرفا داره کار خودش رو می‌کنه چون برای جفت این کلاس‌ها متد len با توجه به نوع ورودی تعریف شده است و این همون چندریختی یا Polymorphism هستش. خب این قدرت پایتونه که انقدر خوب همه چیو داره هماهنگ می‌کنه.

اما در کل سه نوع روش پیاده سازی Polymorphism وجود دارد.
1- Method Overriding
2- Method Overloading
3- Operator Overloading
------------------------------
1-Method Overriding

فرض کنید که کلاس LittleFish از کلاس Animal ارث‌بری می‌کند. در این‌صورت خواهیم داشت.
class Animal:
def breathe(self):
print("I breathe oxygen.")

def feed(self):
print("I eat food.")

class LittleFish(Animal):
def feed(self):
print("I eat plankton.")

نکته‌های جالبی توی تکه کد بالاست. چون کلاس LittleFish از کلاس Animal ارث‌بری کرده پس متد feed جایگزین متد همنامی میشه که در کلاس والد موجوده. اما صرفا برای کلاس LittleFish به این شکل است و متد feed در کلاس LittleFish به اصطلاح Override شده است در مقایسه با متد feed در کلاس Animal. به کد زیر توجه کنید.
LittleFish().feed()   
# I eat plankton.
LittleFish().breathe()
# I breathe oxygen.
Animal().feed()
# I eat food.
اما همانطور که می‌بینید در سطح کلاس Animal هنوز متد feed همانی است که در آن تعریف شده‌است.

--------------------------
2-Method Overloading
حالا یه بحث دیگه‌ای داریم تحت این عنوان بالا.
این توی پایتون پشتیبانی نمیشه. فرض کنیم توی کلاس Animal یه متد دیگه تحت عنوان breath تعریف می‌کنیم‌. مثال زیر رو ببینید.
class Animal:
def breathe(self):
print('I breathe oxygen.')

def breathe(self):
print('I breathe O2 + N2.')

درواقع اگر در یک کلاس دو متد همنام تعریف کنیم با این که اروری برنمی‌گردد ولی صرفا دومی فعال خواهد شد. مهم نیست که متد چکاری انجام می‌دهد صرفا نام متد است که باعث تمایز بین متد‌ها می‌شود. همانطور که گفته شد این ویژگی در پایتون پشتیبانی نمی‌شود و متد اولی غیرفعال خواهد شد.

--------------------------
3- Operator Overloading
این ویژگی بسیار کاربردی و جالب است. درواقع این ویژگی اجازه می‌دهد که عملگرهای (+ - / و ... ) را برای کلاس های جدیدی که ایجاد می‌کنیم بازتعریف کنیم‌.
class Vector:
def __init__(self, x, y, z):
self.x = x
self.y = y
        self.z = z

def __add__(self, other):
x = self.x +other.x
y = self.y + other.y
z = self.z + other.z
return Vector(x, y, z)

درواقع متد add که تعریف کردیم برای این کلاس مثل جمع برداری عمل می‌کند. در واقع عملگر + را برای کلاس وکتور تعریف کردیم. باز هم کد گویای مفهوم هست.
Vec1 = Vector(1, 2 ,3)
vec2 = Vector(1, 1, 1)
vec_add = vec1 + vec2
vec_add.x # 2
vec_add.y # 3
vec_add.z # 4


@lython

BY روزمرگی های یک برنامه نویس


Share with your friend now:
tgoop.com/lython/59

View MORE
Open in Telegram


Telegram News

Date: |

To upload a logo, click the Menu icon and select “Manage Channel.” In a new window, hit the Camera icon. Hui said the time period and nature of some offences “overlapped” and thus their prison terms could be served concurrently. The judge ordered Ng to be jailed for a total of six years and six months. Matt Hussey, editorial director at NEAR Protocol also responded to this news with “#meIRL”. Just as you search “Bear Market Screaming” in Telegram, you will see a Pepe frog yelling as the group’s featured image. 1What is Telegram Channels? ‘Ban’ on Telegram
from us


Telegram روزمرگی های یک برنامه نویس
FROM American