شیوه فکر راجع به مسئله و سازماندهی کدها متفاوت است بعضی ها رویه ای هستن بعضی ها شی گرایی
که امروزه بیشتر برنامه نویسی ها بسته به مسئله شیوه فکرشون از نوع شی گرایی هست که ما تو این مقاله بهش میپدازیم:
1-شی گرایی چیست؟
راهی برای ایجاد و مدیریت اشیاء ارائه می دهند و کارش این است که برنامه دارای ساختار و اسکلت باشد
2-در اینجا منظور از یک شی چیست؟
شی به دو صورت استاتیک و داینامیک موجود هست که به بررسی هر کدام خواهیم پرداخت
1- استاتیک
حالت استاتیک یک جسم را نشان دهد، یعنی اشیا تغییر نمیکنند، با ویژگیهایی که به عنوان کلید (نام)و مقدار های آن ذکر شدهاند.
به عنوان مثال، اجازه دهید آدرس پستی مردم را در یک جامعه محلی در نظر بگیریم، ما میتوانیم آدرسهای فردی را نمایش دهیم
مثال 1-1
p1 = {'name' : "ABC" , 'street': "Central Street - 1" } p2 = {'name' : "DEF" , 'street': "Central Street - 2" } p3 = {'name' : "AXY" , 'street': "Central Street - 1" }
2 داینامیک
اکثر زبانهای برنامه نویسی برای ایجاد یک شی کلمه کلیدی به نام کلاس ارائه می دهند که باید شی از آن ساخته شود و پایتون نیز از این قاعده مستثنی نیست.
3- کلاس چیست؟
یک کلاس طرح و نقشه را تعریف می کند ، به عبارت دیگر یک کلاس شامل متغیرها، روشها، توابع است.. میتوانیم آدرس های پستی بالا را نیز با استفاده از اشیا کلاس نیز ذخیره کنیم.
می توان کلاس ها را به دو بخش دارای طرح کلی یا بدون طرح کلی تقسیم بندی کرد
1-کلاس بدون طرح کلی
ما میتوانیم با ایجاد یک کلاس PostalAddress بدون یک طرح کلی از پیش تعیینشده شروع کنیم. پایتون به اضافه کردن اعضای زمان اجرا (identifiable ویژگی)اضافه کردن به اشیا اجازه میدهد و ما از همان برای ایجاد آدرس افراد در همان محله که مشابه آدرس های داده شده p۱ و p۲ در بالا "مثال 1-1" استفاده میکنیم
مثال 2-1
class PostalAddress: pass
2-کلاس با طرح کلی:
ما میتوانیم به دو روش به کلاس دسترسی داشته باشیم: بدون ایجاد شی و ایجاد یک شی.
بدون ایجاد یک شی
به منظور دستیابی به عملکرد درون کلاس، تمام کاری که باید انجام دهید این است که کلاس را با نام کلاس خود صدا کنید وسپس "."و بعد از آن تابع موجود در کلاس را صدا بزنید . در کلاس های که طرح کلی یا بدنه ندارند این طور فراخوانی با error همراه خواهد بود
مثال 3-1
PostalAddress.designer() #error PostalAddress.first_appeared() #error
با ساختن شی
مثال 4-1
cP1 = PostalAddress() # Create an Instance for person ABC cP1.name = "ABC" cP1.street = "Central Street - 1" # Create an Instance for person DEF cP2 = PostalAddress() cP2.name = "DEF" cP2.street = "Central Street - 2"
حالا ایجاد یک شی یک کار سخت نیست تمام کاری که شما باید انجام دهید این است که از متغیری به نام "cP2","cP1" در این مورد استفاده کنید و آن را به "class PostalAddress" نسبت دهید و سپس با کمک اپراتور "." که میتوانید از توابع داخل کلاس استفاده کنید یا میتوانید به آن شی متغییر اضافه کنید همانند مثال 4-1
اشیاء نیز می توانند تمام آنچه که به آنها اختصاص داده شده را با استفاده از یک متد داخلی به نام __dict__ نمایش داده شوند.
مثال 5-1
print(cP1.__dict__) print(cP2.__dict__) # The output will be same as p1 and p2 {'name': 'ABC', 'street': 'Central Street - 1'} {'name': 'DEF', 'street': 'Central Street - 2'}
میتوانیم به عناصری با کلیدها دسترسی داشته باشیم با روش زیر
مثال 6-1
print(p1["name"]) # prints ABC example 1-1 print(cP1.__dict__["name"]) # prints ABC from objects example 1-4
روش هایی که در بالا اشاره شد برای شی های ساده مناسب هست اما کلاس با بدنه نه تنها قابلیت اضافه کردن رفتارها را ارایه میدهد (در نتیجه اجازه تغییر حالت اشیا را میدهد)، بلکه ویژگیهای اضافی نیز فراهم میکند که به برنامه نویسان در مدیریت اشیا به روش ساده و آسان کمک میکند.
قبل از اینکه به قابلیتهای ارائهشده توسط کلاس نگاه کنیم، اجازه دهید ابتدا به یکی از اشکالات عمده کد که در بالا نوشته شده نگاه کنیم. میتوانیم قوانینی را که در بالا نوشته شده را تغییر دهیم.
1 p1 = {'name' : "ABC" , 'street': "Central Street - 1" } 2 p2 = {'names' : "DEF" , 'street': "Central Street - 2", "NewVar" : "Not Needed" }# and 3 class PostalAddress: 4 pass 5 cP1 = PostalAddress() 6 cP1.name = "ABC" 7 cP2 = PostalAddress() 8 cP2.names = "DEF" 9 cP2.NewVar = "Not Needed"
اشتباهاتی که در بالا صورت گرفت در خط 2 اضافه کردن کلید NewVar به شی p2 و همچنین در خط 8 اضافه کردن کلید names به شی cP2 که هر کدام بدون مشکل اجرا خواهند ولی هیچ نظمی در کار نیست همان طرح کلی که از بروز خطا در برنامه های سنگین جلوگیری کند پس باز هم به کلاس با طرح کلی میرسیم که روش مناسب تری است