برنامه ‌نویسی شی گرا در پایتون

4 سال پیش
برنامه ‌نویسی شی گرا در پایتون

برنامه ‌نویسی شی گرا در پایتون

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، با  برنامه نویسی شی گرا  در پایتون (object-oriented programming) و مفهوم کلی  آن آشنا خواهید شد.

پیشنهاد ویژه : پکیج آموزش طراحی وب سایت با پایتون و جنگو

برنامه نویسی شی گرا 

پایتون یک زبان برنامه نویسی چند پارادایمی است. از رویکردهای مختلف برنامه نویسی پشتیبانی می کند.

یکی از روشهای محبوب برای حل یک مشکل برنامه نویسی ، ایجاد اشیا است. این به عنوان برنامه نویسی شی گرا (OOP) شناخته می شود.

یک شی دو ویژگی دارد:

  • ویژگی
  • رفتار

بیایید مثالی بزنیم:

یک طوطی می تواند یک شی باشد ، زیرا دارای ویژگی های زیر است:

  • نام، سن، رنگ به عنوان ویژگی
  • آواز، رقص به عنوان رفتار

مفهوم OOP در پایتون بر ایجاد کد قابل استفاده مجدد متمرکز است. این مفهوم به DRY (تکرار نکنید) نیز معروف است.

در پایتون، مفهوم OOP از برخی اصول اساسی پیروی می کند:

کلاس

کلاس یک طرح اولیه برای آن شی است.

می توانیم کلاس را به عنوان طرحی از طوطی با برچسب در نظر بگیریم. این شامل تمام جزئیات مربوط به نام، رنگ، اندازه و غیره است. بر اساس این توصیفات، ما می توانیم در مورد طوطی مطالعه کنیم. در اینجا، یک طوطی یک شی است.

مثال برای کلاس طوطی

class Parrot:
    pass

 

در اینجا، ما از کلید واژه class برای تعریف یک کلاس خالی Parrot  استفاده می کنیم. از کلاس، ما نمونه ها را می سازیم. نمونه یک شی خاص است که از یک کلاس خاص ایجاد شده است.

 

شی در پایتون

یک شی (نمونه) نمونه ای از یک کلاس است. وقتی کلاس تعریف می شود، فقط توضیحات برای شی تعریف می شود. بنابراین، هیچ حافظه یا فضای ذخیره سازی اختصاص داده نمی شود.

مثال

obj = Parrot()

 

در اینجا، obj یک شی کلاس Parrot است.

فرض کنید ما جزئیات Parrot ها را داریم. اکنون، ما می خواهیم نحوه ساخت کلاس و اشیای Parrot ها را نشان دهیم.

مثال ۱: ایجاد کلاس و شی در پایتون

class Parrot:

    # class attribute
    species = "bird"

    # instance attribute
    def __init__(self, name, age):
        self.name = name
        self.age = age

# instantiate the Parrot class
blu = Parrot("Blu", 10)
woo = Parrot("Woo", 15)

# access the class attributes
print("Blu is a {}".format(blu.__class__.species))
print("Woo is also a {}".format(woo.__class__.species))

# access the instance attributes
print("{} is {} years old".format( blu.name, blu.age))
print("{} is {} years old".format( woo.name, woo.age))

 

خروجی

Blu is a bird
Woo is also a bird
Blu is 10 years old
Woo is 15 years old

 

در برنامه فوق یک کلاس با نام Parrot ایجاد کردیم. سپس، ویژگی ها را تعریف می کنیم. ویژگی ها مشخصه یک شی است.

این ویژگی ها در داخل روش __init__ کلاس تعریف می شوند. این روش مقداردهنده اولیه است که به محض ایجاد شی  ابتدا اجرا می شود.

سپس، نمونه هایی از کلاس Parrot ایجاد می کنیم. در اینجا، blu و woo منابع (مقادیر) به اشیا جدید ما هستند.

با استفاده از __class _ می توانیم به ویژگی کلاس دسترسی پیدا کنیم. ویژگی های کلاس برای همه نمونه های یک کلاس یکسان است. به همین ترتیب، با استفاده از blu.name و blu.age به ویژگی های نمونه دسترسی پیدا می کنیم. با این حال، ویژگی های نمونه برای هر نمونه از یک کلاس متفاوت است.

 

 روش ها (متدها)

متدها توابع تعریف شده در بدنه یک کلاس هستند. از آنها برای تعریف رفتارهای یک شی استفاده می شود.

مثال ۲: ایجاد متد ها در پایتون

class Parrot:
    
    # instance attributes
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    # instance method
    def sing(self, song):
        return "{} sings {}".format(self.name, song)

    def dance(self):
        return "{} is now dancing".format(self.name)

# instantiate the object
blu = Parrot("Blu", 10)

# call our instance methods
print(blu.sing("'Happy'"))
print(blu.dance())

 

خروجی

Blu sings 'Happy'
Blu is now dancing

 

در برنامه فوق، ما دو روش یعنی ()sing و ()dance را تعریف می کنیم. اینها متدهای نمونه (instance) نامیده می شوند زیرا آنها بر روی یک شی نمونه به عنوان مثال یعنی blu فراخوانی می شوند.

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

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

مثال ۳: استفاده از وراثت در پایتون

# parent class
class Bird:
    
    def __init__(self):
        print("Bird is ready")

    def whoisThis(self):
        print("Bird")

    def swim(self):
        print("Swim faster")

# child class
class Penguin(Bird):

    def __init__(self):
        # call super() function
        super().__init__()
        print("Penguin is ready")

    def whoisThis(self):
        print("Penguin")

    def run(self):
        print("Run faster")

peggy = Penguin()
peggy.whoisThis()
peggy.swim()
peggy.run()

 

خروجی

Bird is ready
Penguin is ready
Penguin
Swim faster
Run faster

 

در برنامه فوق، ما دو کلاس یعنی Bird (کلاس والدین) و Penguin (کلاس کودک) ایجاد کردیم. کلاس کودک توابع کلاس والدین را به ارث می برد. این را می توانیم با متد ()swim دنبال کنیم.

دوباره، کلاس کودک رفتار کلاس والدین را اصلاح کرد. این را می توانیم با متد ()whoisThis دنبال کنیم. بعلاوه، ما با ایجاد یک متد ()run  جدید، توابع کلاس والدین را گسترش می دهیم.

علاوه بر این، ما از تابع () super در داخل متد ()__init __  استفاده می کنیم. این به ما اجازه می دهد تا متد ()__init __ کلاس والدین را در داخل کلاس فرزند اجرا کنیم.

 

کپسوله سازی در پایتون

با استفاده از OOP در پایتون می توانیم دسترسی به متدها و متغیرها را محدود کنیم. این کار که از اصلاح مستقیم داده ها که کپسول سازی نامیده می شود، جلوگیری می کند. در پایتون، ما ویژگی های خصوصی را با استفاده از خط زیرین به عنوان پیشوند یگانه _ یا دوگانه __ نشان می دهیم.

 

مثال ۴: کپسوله سازی داده ها در پایتون

class Computer:

    def __init__(self):
        self.__maxprice = 900

    def sell(self):
        print("Selling Price: {}".format(self.__maxprice))

    def setMaxPrice(self, price):
        self.__maxprice = price

c = Computer()
c.sell()

# change the price
c.__maxprice = 1000
c.sell()

# using setter function
c.setMaxPrice(1000)
c.sell()

 

خروجی

Selling Price: 900
Selling Price: 900
Selling Price: 1000

 

در برنامه فوق کلاس Computer را تعریف کردیم.

ما از متد ()__init __ برای ذخیره حداکثر قیمت فروش کامپیوتر استفاده کردیم. ما سعی کردیم قیمت را اصلاح کنیم. با این حال، ما نمی توانیم آن را تغییر دهیم زیرا پایتون با __maxprice به عنوان ویژگی های خصوصی رفتار می کند.

همانطور که نشان داده شده است، برای تغییر مقدار ما باید از یک تابع setter یعنی()setMaxPrice استفاده کنیم که قیمت را به عنوان یک پارامتر در نظر می گیرد.

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

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

فرض کنید، ما باید یک شکل را رنگ کنیم، چندین گزینه شکل (مستطیل ، مربع ، دایره) وجود دارد. با این حال می توانیم از همین روش برای رنگ آمیزی هر شکلی استفاده کنیم. این مفهوم چندریختی نام دارد.

 

مثال ۵: استفاده از پلی مورفیسم در پایتون

class Parrot:

    def fly(self):
        print("Parrot can fly")
    
    def swim(self):
        print("Parrot can't swim")

class Penguin:

    def fly(self):
        print("Penguin can't fly")
    
    def swim(self):
        print("Penguin can swim")

# common interface
def flying_test(bird):
    bird.fly()

#instantiate objects
blu = Parrot()
peggy = Penguin()

# passing the object
flying_test(blu)
flying_test(peggy)

 

خروجی

Parrot can fly
Penguin can't fly

 

در برنامه فوق، ما دو کلاس Parrot و Penguin را تعریف کردیم. هر یک از آنها یک متد ()fly مشترک دارند. با این حال، عملکرد آنها متفاوت است.

برای استفاده از چند شکلی، ما یک رابط مشترک ایجاد کردیم به عنوان مثال تابع () flying_test که هر شی ای را می گیرد و متد ()fly شی را فراخوانی می کند. بنابراین، وقتی از اشیای blu و peggy در تابع flying_test() عبور کردیم، به طور موثر اجرا شد.

نکات کلیدی برای یادآوری:

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

منبع.

لیست جلسات قبل آموزش برنامه نویسی پایتون

  1. آموزش نصب و اجرای برنامه نویسی پایتون
  2. کلیدواژه ها و شناسه های برنامه نویسی پایتون
  3. دستورات، تورفتگی ها و کامنت ها در برنامه نویسی پایتون
  4. متغیرها، ثابت ها و لیترال ها در برنامه نویسی پایتون 
  5. انواع داده ها در برنامه نویسی پایتون
  6. تبدیل نوع در برنامه نویسی پایتون
  7. ورودی، خروجی و وارد کردن در برنامه نویسی پایتون
  8. عملگرها در برنامه نویسی پایتون
  9. نام و دامنه در برنامه نویسی پایتون
  10. دستور شرطی if…else در برنامه نویسی پایتون
  11. حلقه for در برنامه نویسی پایتون
  12. حلقه while در برنامه نویسی پایتون
  13. دستورات break و continue در برنامه نویسی پایتون
  14. دستور pass در برنامه نویسی پایتون
  15. توابع در برنامه نویسی پایتون
  16. آرگومان تابع در برنامه نویسی پایتون
  17. تابع بازگشتی در برنامه نویسی پایتون
  18. تابع بی نام/ تابع لامبدا در برنامه نویسی پایتون
  19. متغیرهای سراسری، محلی و غیر محلی در برنامه نویسی پایتون
  20. کلیدواژه global در برنامه نویسی پایتون
  21. ماژول های برنامه نویسی پایتون
  22. پکیج ها در برنامه نویسی پایتون
  23. اعداد و تبدیل نوع داده در برنامه نویسی پایتون 
  24. لیست در برنامه نویسی پایتون
  25. تاپل در برنامه نویسی پایتون 
  26. رشته ها در برنامه نویسی پایتون
  27. مجموعه ها در برنامه نویسی پایتون
  28. دیکشنری در برنامه نویسی پایتون
  29. عملیات ورودی/خروجی در برنامه نویسی پایتون 
  30. دایرکتوری و مدیریت فایل ها در برنامه نویسی پایتون
  31. خطاها و استثناهای توکار در برنامه نویسی پایتون
  32. مدیریت استثناها در برنامه نویسی پایتون
  33. استثناهای تعریف شده توسط کاربر در برنامه نویسی پایتون
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه