
کلاس ها و اشیاء در پایتون
در این بخش به بررسی کلاس ها و اشیاء در پایتون می پردازیم.
در پایتون، کلاس ها و اشیاء مفاهیم اساسی برنامه نویسی شی گرا هستند. با استفاده از کلاس ها، می توانید نوع داده ای خودتان را تعریف کنید و از آن برای ایجاد اشیاء مختلف استفاده کنید.
برای تعریف یک کلاس در پایتون، از کلیدواژه "class
” استفاده می شود. به عنوان مثال، کلاسی به نام "Person"
را می توان به صورت زیر تعریف کرد:
در این کد، ما یک کلاس به نام “Person” تعریف کرده ایم. این کلاس دارای دو ویژگی “name” و “age” است که مقدار آنها در زمان ساخت اشیاء مشخص می شود. همچنین، این کلاس دارای یک متد به نام “say_hello” است که با فراخوانی این متد بر روی یک شیء از این کلاس، متن “Hello, my name is …” را چاپ می کند.
برای ایجاد یک شیء از این کلاس، می توانیم از کد زیر استفاده کنیم:
person = Person("John", 30)
person.say_hello()
در این کد، ابتدا یک شیء به نام “person” از کلاس “Person” ایجاد شده است و مقدار “name” و “age” آن به ترتیب برابر با “John” و 30 قرار داده شده است. سپس با فراخوانی متد “say_hello” بر روی این شیء، متن “Hello, my name is John and I am 30 years old.” چاپ می شود.
در پایتون، اشیاء می توانند شامل ویژگی ها و متدهایی باشند که در کلاس تعریف شده اند. با استفاده از شیء، می توانید به ویژگی ها و متدهای آن دسترسی داشته باشید و آنها را تغییر دهید.
کلاس ها در پایتون
کلاسها در پایتون، مجموعهای از متدها (توابع) و ویژگیها (متغیرها) هستند که یک نوع داده را تعریف میکنند. با تعریف یک کلاس، شما یک قالب برای ساخت شیءها (instances) از آن کلاس ایجاد میکنید. برای تعریف یک کلاس در پایتون، از کلمه کلیدی class
استفاده میشود.
متد ها و ویژگی ها در پایتون مشابه توابع و متغیرهای عادی عمل میکنند، با این تفاوت که متدها و ویژگیها به شیء مرتبط هستند و میتوانید آنها را در داخل کلاس تعریف کنید.
برای دسترسی به ویژگیها و متدهای یک شیء، ابتدا باید یک شیء از کلاس بسازید. برای ایجاد یک شیء، نام کلاس را به عنوان یک تابع صدا بزنید. به عنوان مثال، اگر کلاس Person را تعریف کردهاید، یک شیء از آن کلاس را میتوانید به صورت زیر بسازید:
person = Person()
اگر کلاس شما ویژگیهای اولیه دارد، میتوانید مقدار آنها را در هنگام ساخت شیء به عنوان پارامترهای تابع ارسال کنید:
person = Person("John", 30)
وقتی یک شیء را ایجاد کردید، میتوانید به ویژگیها و متدهای آن دسترسی داشته باشید. برای دسترسی به ویژگیها، میتوانید از نام شیء به عنوان متغیر و نام ویژگی به عنوان زیرمجموعه استفاده کنید. به عنوان مثال، اگر میخواهید به ویژگی “name” دسترسی داشته باشید:
print(person.name)
برای فراخوانی یک متد از یک شیء، باید نام شیء را به عنوان متغیر، نام متد را به عنوان زیرمجموعه، و هر پارامتر مورد نیاز را به عنوان آرگومانهای تابع استفاده کنید. به عنوان مثال، اگر میخواهید متد “say_hello” را بر روی شیء person صدا بزنید:
person.say_hello()
همچنین میتوانید متدهای کلاس را به صورت مستقیم بدون ایجاد یک شیء صدا بزنید. برای این کار، از نام کلاس به عنوان نام متغیر استفاده کرده و نام متد را به عنوان زیرمجموعه استفاده کنید. به عنوان مثال، اگر میخواهید متد “get_older” را بر روی کلاس Person صدا بزنید:
Person.get_older(person)
در پایتون، شما میتوانید از وراثت (inheritance) استفاده کنید تا کلاسهای جدیدی را برای تعریف ساختارهای مشابه کلاسهای موجود ایجاد کنید. با استفاده از وراثت، یک کلاس جدید (که به عنوان کلاس فرزند یا subclass شناخته میشود) میتواند ویژگیها و متدهای کلاس والد (که به عنوان کلاس پدر یا superclass شناخته میشود) را به ارث ببرد و به ساختارهای مشابهی دسترسی داشته باشد. برای تعریف یک کلاس فرزند، کافی است که از کلاس پدر به عنوان پارامتر برای تعریف کلاس جدید استفاده کنید. به عنوان مثال:
در این مثال، کلاس Employee از کلاس Person به عنوان کلاس پدر ارثبری میکند و ویژگی salary را به صورت اضافی به کلاس اضافه میکند.
کلاس های انتزاعی در پایتون
در پایتون، شما میتوانید از مفهوم انتزاع (abstraction) استفاده کنید تا پیچیدگیهای داخلی کلاسها را مخفی کنید و فقط ویژگیهای مهم را به کاربران ارائه دهید. برای ایجاد یک کلاس انتزاعی، باید از کلاسهای abstract در پایتون استفاده کنید و به کمک آنها، متدهای انتزاعی را تعریف کنید. متدهای انتزاعی متدهایی هستند که فقط نام و پارامترهای آنها تعریف میشوند و بدنه آنها خالی است. به عنوان مثال:
در این مثال، کلاس Shape از کلاس abstract base class (ABC) ارثبری میکند و دو متد abstract با نامهای area و perimeter تعریف شده است. این دو متد باید توسط کلاسهایی که از کلاس Shape ارثبری میکنند، پیادهسازی شوند.
مفهوم چندشکلی (polymorphism)
در پایتون، شما میتوانید از مفهوم چندشکلی (polymorphism) استفاده کنید تا یک متد را با ورودیهای مختلف به صورت متفاوت اجرا کنید. در این مفهوم، یک متد با نام ورودیهای مختلف، دارای عملکرد مختلف است. برای استفاده از چندشکلی در پایتون، میتوانید از مفهوم افزونگی (overloading) استفاده کنید و برای هر ترکیب ورودیهای مختلف، یک تابع با نام یکسان و پارامترهای متفاوت تعریف کنید. اما، در پایتون، این قابلیت وجود ندارد و برای پیادهسازی چندشکلی، باید از مفهوم پویایی (dynamic dispatch) استفاده کنید.
در این مفهوم، پایتون با استفاده از ارثبری چندگانه (multiple inheritance)، امکان پیادهسازی چندشکلی را فراهم میکند. با ارثبری چندگانه، یک کلاس میتواند از چندین کلاس به طور همزمان ارثبری کند و به این ترتیب، ویژگیهای مختلف را از کلاسهای مختلف به ارث ببرد و از آنها استفاده کند.
به عنوان مثال:
در این مثال، کلاس C از کلاسهای A و B به طور همزمان ارثبری کرده است و متد hello را پیادهسازی نکرده است. به همین دلیل، وقتی این متد را اجرا میکنیم، ابتدا به دنبال پیادهسازی این متد در کلاس C میگردد. اما، اگر این متد در کلاس C پیدا نشود، به دنبال آن در کلاسهایی که از A و B ارثبری شدهاند، میگردد. در اینجا، متد hello در کلاس A پیدا میشود و اجرا میشود.
بررسی اشیاء در پایتون
در پایتون، همه چیز به شکل یک شیء است، به عبارت دیگر، پایتون یک زبان برنامهنویسی شیءگرا است. هر شیء در پایتون دارای وضعیت (state) و رفتار (behavior) است. وضعیت شیء توسط ویژگیهای آن (attributes) و رفتار آن توسط روشهای آن (methods) تعریف میشود.
برای ساخت یک شیء در پایتون، ابتدا باید یک کلاس (class) تعریف کرد. یک کلاس یک نوع دادهای سفارشی است که توسط برنامهنویس تعریف میشود و حاوی ویژگیها و روشهایی است که مشخص میکند یک شیء از آن نوع دادهای چگونه ساخته میشود و چه عملیاتی روی آن قابل انجام است.
به عنوان مثال، فرض کنید که میخواهیم یک کلاس برای ساخت شیء نمایشگر تلفن همراه (mobile display) بسازیم. در این صورت، میتوانیم کلاس زیر را تعریف کنیم:
در این کلاس، ویژگیهای size و resolution به ترتیب اندازه و رزولوشن نمایشگر را نشان میدهند و روش display_info برای نمایش اطلاعات نمایشگر تعریف شده است.
حال میتوانیم یک شیء از این کلاس بسازیم:
display1 = MobileDisplay(5.5, "1920x1080")
display1.display_info()
در این مثال، یک شیء با نام display1 از کلاس MobileDisplay ساخته شده است و ویژگیهای آن با ارزشهای 5.5 و “1920×1080” مقداردهی اولیه شدهاند. سپس، روش display_info برای نمایش اطلاعات نمایشگر صدا زده میشود و خروجی زیر نمایش داده میشود:
Display size: 5.5
Display resolution: 1920x1080
همچنین، میتوانیم چندین شیء دیگر از این کلاس بسازیم:
display2 = MobileDisplay(6.1, "2520x1080")
display2.display_info()
display3 = MobileDisplay(5.8, "2436x1125")
display3.display_info()
خروجیهای بدست آمده به ترتیب عبارتاند از:
Display size: 6.1
Display resolution: 2520x1080
Display size: 5.8
Display resolution: 2436x1125
این نمونه توضیحات کوتاهی از کلاسها و اشیاء در پایتون است. در پایتون، کلاسها و اشیاء یکی از اصلیترین مفاهیم برنامهنویسی شیءگرا هستند که در بسیاری از برنامههای پایتون مورد استفاده قرار میگیرند.
آیا این مطلب برای شما مفید بود ؟
زشتى سستى و سخن چينى
و درود خدا بر او، فرمود: هر كس تن به سستى دهد، حقوق را پايمال كند، و هر كس سخن چين را پيروى كند دوستى را به نابودى كشاند.
حکمت 239 نهج البلاغه