کلاس در پایتون چیست؟ — آموزش کامل ساخت و استفاده + کد و مثال
«کلاس» (Class) یکی از مهمترین و پرکاربردترین مفاهیم در برنامه نویسی محسوب میشود. کلاس بستری را فراهم میکند تا دادهها و توابع در کنار یکدیگر قرار بگیرند که همین امر در بهتر شدن کدنویسی بهصورت سازمانیافته نقش بهسزایی دارد. کلاس در پایتون به عنوان یکی از اساسیترین مفاهیم این زبان تلقی میشود، زیرا تمامی ماهیتهای این زبان برنامه نویسی بر پایه مفهوم کلاس بنا شدهاند. همچنین، زبان پایتون جزء زبانهای برنامه نویسی شیگرا به شمار میرود که از کلاس، به عنوان مهمترین عنصر شی گرایی، به منظور پیادهسازی اصول آن استفاده میکند.
در مطلب حاضر، سعی بر این است تا آموزش جامعی از مفهوم کلاس و اجزای اصلی آن، نحوه پیادهسازی و استفاده از آن در زبان پایتون ارائه شود. بهعلاوه، در این مقاله، با ارائه مثالهای کاربردی از زبان برنامه نویسی پایتون به نحوه پیادهسازی اصول شیگرایی با استفاده از کلاس پرداخته میشود.
مفهوم شی در زبان برنامه نویسی پایتون چیست ؟
زبان برنامه نویسی پایتون به عنوان یکی از زبانهای برنامه نویسی شی گرا محسوب میشود. یکی از اجزای اصلی مفهوم شیگرایی، «شی» (Object) است که ویژگیها و رفتارهای دادهها را مشخص میکند. تمامی اجزای زبان پایتون نظیر «لیست» (List)، «تاپل» (Tuple)، «مجموعه» (Set)، «دیکشنری» (Dictionary)، «تابع» (Function) و سایر اجزاء در قالب شی در اختیار کاربران قرار میگیرند. به عبارتی، با استفاده از دستور type() میتوان شی بودن این اجزاء را در پایتون بررسی کرد.
حتی «انواع داده» (Data Types) در پایتون نیز از نوع و ماهیت شی هستند. به عنوان مثال، یکی از انواع دادهها در زبان برنامه نویسی پایتون، نوع داده عددی (Integer) است. متغیری که در این زبان از نوع عددی تعریف شده باشد، عضو یا شیئی از کلاس Integer محسوب میشود.
هر یک از اشیای ساخته شده در پایتون دارای یک سری «ویژگیها» (Properties) و «رفتارهایی | متدهایی» (Methods) هستند که در دنیای برنامه نویسی به آنها «مشخصه» (Attribute) گفته میشوند. به منظور تعریف هر یک از ویژگیها و متدهای اشیا میتوان از ماهیت منطقی به نام کلاس استفاده کرد. در ادامه، به مفهوم کلاس در زبان برنامه نویسی پایتون پرداخته میشود.
مفهوم کلاس در زبان پایتون چیست ؟
کلاس در برنامه نویسی، طرح اولیهای از یک شی است و با تعریف اشیای مختلف از یک کلاس میتوان موجودیتهای (اشیای) مختلفی را ایجاد کرد که در تعداد و نوع مشخصهها با یکدیگر اشتراک دارند، اما مقادیر هر یک از مشخصههای اشیاء با یکدیگر متفاوت هستند.
با استفاده از تعریف اشیای مختلف به عنوان «نمونهای» (Instance) از کلاس، میتوان به ویژگیها و متدهای درون کلاس دسترسی داشت و آنها را برای هر شی جدید، مقداردهی کرد.
در تصویر زیر، مثال ملموسی از مفهوم کلاس و شی در دنیای واقعی مشاهده میشود. در این مثال، کلاسی با نام کلاس مشتری وجود دارد که شامل ویژگیهای مشتریان و عملکرد (متد) آنها است. ایمیل و شماره تلفن مشتریان به عنوان ویژگیها و نحوه سفارش و دلیل مرجوعی کالا به عنوان متدهای کلاس تعیین شدهاند.
هر یک از مشتریان نیز به عنوان اشیای کلاس مشتری تلقی میشوند که دارای ویژگیها و متدهای کلاس با مقادیر متفاوت هستند. به عبارتی، تمامی مشتریان دارای ویژگیهای آدرس ایمیل و شماره تلفن هستند که مقدارشان برای هر یک از مشتریان، منحصربفرد است. بهعلاوه، تمامی مشتریان دارای متدهای نحوه سفارش کالا و دلیل مرجوعی محصول هستند که میتوانند با مقادیر مختلفی مقداردهی شوند. به عنوان مثال، دلیل مرجوعی مشتری اول میتواند خرابی محصول باشد، در حالی که مشتری سوم به دلیل گذشتن تاریخ انقضای محصول، تصمیم به مرجوع کردن کالا گرفته است.
زبان برنامه نویسی پایتون به عنوان یکی از زبانهای برنامه نویسی شیگرا، بر پایه مفهوم شی و کلاس طراحی شده است. به عبارتی، با تعریف هر ماهیتی در این زبان نظیر انواع ساختار داده، شی جدیدی از کلاسهای آنها ساخته میشوند که هر کدام دارای مشخصههای خاص خود هستند. به عنوان مثال، با تعریف لیست جدیدی در پایتون، شی جدیدی از کلاس لیست ساخته میشود که این شی دارای مشخصههای منحصربفردی برای عملیات مختلف نظیر درج آیتم در لیست، حذف آیتم از لیست، اندازه لیست و سایر موارد است. بدینتریب، کلاس در پایتون به عنوان یکی از مهمترین ارکان این زبان محسوب میشود. در ادامه، مزایای استفاده از کلاس در برنامه نویسی پایتون ارائه شده است.
مزایای استفاده از کلاس در برنامه نویسی پایتون چیست ؟
کلاس یکی از مهمترین مفاهیم در برنامه نویسی محسوب میشود که کاربرد زیادی در توسعه پروژههای نرمافزاری دارد. به دلیل مزیتهای مهم کلاس، برنامهنویسان سعی دارند از آن بهطور مکرر در برنامههای خود استفاده کنند. در ادامه، به برخی از اصلیترین مزایای استفاده از کلاس در برنامه نویسی اشاره میشود:
- در زبان پایتون، نگهداری مشخصهها و متدهای اشیا در داخل کلاس باعث میشود سازماندهی کدها بهتر انجام شود.
- کلاس به عنوان یکی از اجزای اصلی شیگرایی محسوب میشود و با استفاده از آن میتوان به پیادهسازی اصول شیگرایی نظیر کپسولهسازی و ارثبری پرداخت. از آنجا که پایتون به عنوان یکی از زبانهای برنامه نویسی شیگرا به حساب میآید، از کلاس به منظور اجرایی کرد اصول شیگرایی پشتیبانی میکند.
- با استفاده از کلاس در پایتون میتوان از قطعه کدهای نوشته شده به دفعات مختلف در پروژههای متفاوت استفاده کرد که همین امر به صرفهجویی در هزینههای زمانی برای توسعه پروژههای کامپیوتری کمک شایانی میکند.
- با استفاده از کلاس در پایتون میتوان توابع مرتبط به هم را درون یک کلاس نوشت که این قابلیت در تمیز نوشتن کدهای برنامه نقش بسزایی دارد.
در ادامه مقاله حاضر، با ارائه مثال کاربردی به نحوه تعریف کلاس در پایتون و شیوه استفاده از آن پرداخته میشود.
نحوه ساخت کلاس در زبان پایتون چگونه است ؟
به منظور تعریف کلاس در پایتون باید از کلمه کلیدی class به همراه نام کلاس و علامت دو نقطه ( : ) استفاده کرد. در پایتون، حرف اول نام کلاس، با حرف بزرگ نوشته میشود و باید از درج فاصله در نام کلاس خودداری کرد.
پس از اعلان کلاس، میتوان از «داک استرینگ» (Docstring) استفاده کرد. داک استرینگها توضیحاتی در پایتون هستند که پس از اعلان کلاس یا تابع نوشته میشوند و شرحی از عملیات آنها را ارائه میدهند. نوشتن داک استرینگها الزامی نیستند اما به خوانایی کد و قابلفهم کردن آن کمک بهسزایی میکند. مثال زیر، نحوه تعریف یک کلاس با نام IntellipaatClass را نشان میدهد.
1class IntellipaatClass:
2 “Class statements and methods here'”
پس از داک استرینگها میتوان ویژگیهای کلاس را با استفاده از تعریف متغیر مشخص کرد. در مثال زیر، متغیر a یک ویژگی برای کلاس IntellipaatClass محسوب میشود. پس از تعریف متغیرهای کلاس، میتوان متدهای (توابع) کلاس را تعریف کرد. کلاس IntellipaatClass دارای یک متد با نام function1 است که متنی را در خروجی چاپ میکند.
با اعلان کلاس جدید، بهطور خودکار، شیئی همنام با کلاس ایجاد میشود که میتوان با استفاده از آن، به ویژگیها و متدهای کلاس دسترسی داشت. در مثال زیر، نحوه استفاده از شی همنام با کلاس به منظور دسترسی به متغیر (ویژگی) و تابع (متد) درون کلاس ملاحظه میشود. علامت نقطه ( . ) به منظور دسترسی به مشخصههای کلاس توسط شی کاربرد دارد.
1#3
2class IntellipaatClass:
3 a = 5
4 def function1():
5 print('Welcome to Intellipaat')
6#accessing attributes using the class object of same name
7IntellipaatClass.function1()
8print(IntellipaatClass.a)
خروجی قطعه کد فوق در ادامه ملاحظه میشود:
Welcome to Intellipaat 5
نحوه تعریف کلاس در زبان پایتون با استفاده از تابع Type()
تابع type() علاوهبر این که نوع ماهیتها را در زبان پایتون مشخص میکند، کاربرد دیگری نیز دارد. از این تابع میتوان برای ایجاد کلاس در پایتون نیز استفاده کرد. این تابع سه آرگومان به عنوان ورودی خود بهصورت type(<name>, <bases>, <dct>) میپذیرد که در ادامه به توضیح آنها پرداخته شده است:
- آرگومان name : نام کلاس جدید را مشخص میکند. این نام توسط ویژگی __name__ کلاس، قابل دسترس است.
- آرگومان bases : تاپلی از کلاسهای والد کلاس جدید را مشخص میکند.
- آرگومان dct : دیکشنریای از متدها و ویژگیهای کلاس جدید را معین میکند.
در قطعه کد زیر، مثالی از نحوه کاربرد تابع type() برای ساخت کلاس در پایتون ارائه شده است.
1def test_method(self):
2 print("This is Test class method!")
3
4# creating a base class
5class Base:
6 def myfun(self):
7 print("This is inherited method!")
8
9# Creating Test class dynamically using
10# type() method directly
11Test = type('Test', (Base, ), dict(x="atul", my_method=test_method))
12
13# Print type of Test
14print("Type of Test class: ", type(Test))
15
16# Creating instance of Test class
17test_obj = Test()
18print("Type of test_obj: ", type(test_obj))
19
20# calling inherited method
21test_obj.myfun()
22
23# calling Test class method
24test_obj.my_method()
25
26# printing variable
27print(test_obj.x)
همانطور که در قطعه کد فوق ملاحظه میشود، کلاسی با نام Test با استفاده از تابع type ساخته شده است که از کلاس Base ارث میبرد و دارای یک ویژگی با نام x و یک متد با عنوان my_method است. خروجی قطعه کد فوق در ادامه آمده است:
1class IntellipaatClass:
2 a = 5
3 def function1(self):
4 print(‘Welcome to Intellipaat’)#creating a new object named object1 using class object
5
6object1 = IntellipaatClass()
7object1.function1()
بی نظیر
سلام،در قسمت کپسوله سازی مثال دوم یک ایرادی وجود داره.اونم اینکه اولا از کلاس هیچ نمونه ای ساخته نشده ولی روی نمونه jack عملیات اجرا شده
دوما به به متغیر ها و متد های private همینجوری نمیتونیم دسترسی داشته باشیم چون پایتون اسم اون ها رو تبدیل کرده (name mangling) و باید از اسم تبدیل شده برای فراخوانی متد private استفاده کنیم.
با سلام و احترام؛
صمیمانه از همراهی شما با مجله فرادرس و ارائه بازخورد سپاسگزاریم.
مورد اولی که اشاره کردید، اصلاح شد.
درباره قسمت دوم صحبتتون، در ابتدای قسمت کپسولهسازی به این نکته اشاره کردیم:
در برنامه نویسی، مستقیماً نمیتوان به متدهای خصوصی از خارج کلاس یا از طریق کلاسهای فرزند دسترسی داشت. به منظور تعریف متدهای خصوصی، پیش از نام متد، از علامت (_) در پایتون استفاده میشود. البته باید خاطرنشان کرد که پایتون، مانع استفاده از متد خصوصی خارج از کلاس نمیشود. به عبارتی، چنانچه از این متدها در خارج از کلاس، استفاده شوند، خطای کامپایلر رخ نمیدهد و تعریف متدهای خصوصی در پایتون فقط به سایر برنامه نویسان نشان میدهد که این متدها برای داخل کلاس استفاده میشوند. به بیان دیگر، استفاده از علامت (_) قراردادی برای تعیین نام متدهای خصوصی در میان برنامه نویسان است.
مورد name mangling درباره متغیرها و متدهایی هستند که با double underscore شروع میشوند. در پایتون به این متدها و متغیرها هم میشه از بیرون کلاس با استفاده از ساختار زیر دسترسی داشت:
object._ClassName__MethodName
برای شما آرزوی سلامتی و موفقیت داریم.