شی گرایی در عالم پایتون  (بخش اول)

in Python search شیوه فکر راجع به مسئله و سازماندهی کدها متفاوت است بعضی ها رویه ای هستن بعضی ها شی گرایی که امروزه بیشتر برنامه نویسی ها بسته به مسئله شیوه فکرشون از نوع شی گرایی هست که ما تو این مقاله بهش میپدازیم:1-شی گرایی چیست؟ راهی برای ایجاد و مدیریت اشیاء ارائه می دهند و کارش این است که برنامه دارای ساختار و اسکلت باشد2-در اینجا منظور از یک شی چیست؟شی به دو صورت استاتیک و داینامیک موجود هست که به بررسی هر کدام خواهیم پرداخت 1- استاتیکحالت استاتیک یک جسم را نشان دهد، یعنی اشیا تغییر نمی‌کنند، با ویژگی‌هایی که به عنوان کلید (نام)و مقدار های آن ذکر شده‌اند.به عنوان مثال، اجازه دهید آدرس پستی مردم را در یک جامعه محلی در نظر بگیریم، ما می‌توانیم آدرس‌های فردی را نمایش دهیممثال 1-1p1 = {'name' : &quotABC&quot , 'street': &quotCentral Street - 1&quot } p2 = {'name' : &quotDEF&quot , 'street': &quotCentral Street - 2&quot } p3 = {'name' : &quotAXY&quot , 'street': &quotCentral Street - 1&quot } 2 داینامیکاکثر زبانهای برنامه نویسی برای ایجاد یک شی کلمه کلیدی به نام کلاس ارائه می دهند که باید شی از آن ساخته شود و پایتون نیز از این قاعده مستثنی نیست.3- کلاس چیست؟یک کلاس طرح و نقشه را تعریف می کند ، به عبارت دیگر یک کلاس شامل متغیرها، روش‌ها، توابع است.. می‌توانیم آدرس های پستی بالا را نیز با استفاده از اشیا کلاس نیز ذخیره کنیم.می توان کلاس ها را به دو بخش دارای طرح کلی یا بدون طرح کلی تقسیم بندی کرد1-کلاس بدون طرح کلیما می‌توانیم با ایجاد یک کلاس PostalAddress بدون یک طرح کلی از پیش تعیین‌شده شروع کنیم. پایتون به اضافه کردن اعضای زمان اجرا (identifiable ویژگی)اضافه کردن به اشیا اجازه می‌دهد و ما از همان برای ایجاد آدرس افراد در همان محله که مشابه آدرس های داده شده p۱ و p۲ در بالا "مثال 1-1" استفاده می‌کنیممثال 2-1class PostalAddress: pass2-کلاس با طرح کلی: https://vrgl.ir/uWhBv ما می‌توانیم به دو روش به کلاس دسترسی داشته باشیم: بدون ایجاد شی و ایجاد یک شی. بدون ایجاد یک شیبه منظور دستیابی به عملکرد درون کلاس، تمام کاری که باید انجام دهید این است که کلاس را با نام کلاس خود صدا کنید وسپس "."و بعد از آن تابع موجود در کلاس را صدا بزنید . در کلاس های که طرح کلی یا بدنه ندارند این طور فراخوانی با error همراه خواهد بودمثال 3-1PostalAddress.designer() #error PostalAddress.first_appeared() #errorبا ساختن شیمثال 4-1cP1 = PostalAddress() # Create an Instance for person ABC cP1.name = &quotABC&quot cP1.street = &quotCentral Street - 1&quot # Create an Instance for person DEF cP2 = PostalAddress() cP2.name = &quotDEF&quot cP2.street = &quotCentral Street - 2&quotحالا ایجاد یک شی یک کار سخت نیست تمام کاری که شما باید انجام دهید این است که از متغیری به نام "cP2","cP1" در این مورد استفاده کنید و آن را به "class PostalAddress" نسبت دهید و سپس با کمک اپراتور "." که می‌توانید از توابع داخل کلاس استفاده کنید یا میتوانید به آن شی متغییر اضافه کنید همانند مثال 4-1 اشیاء نیز می توانند تمام آنچه که به آنها اختصاص داده شده را با استفاده از یک متد داخلی به نام __dict__ نمایش داده شوند.مثال 5-1print(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-1print(p1[&quotname&quot]) # prints ABC example 1-1 print(cP1.__dict__[&quotname&quot]) # prints ABC from objects example 1-4روش هایی که در بالا اشاره شد برای شی های ساده مناسب هست اما کلاس با بدنه نه تنها قابلیت اضافه کردن رفتارها را ارایه می‌دهد (در نتیجه اجازه تغییر حالت اشیا را می‌دهد)، بلکه ویژگی‌های اضافی نیز فراهم می‌کند که به برنامه نویسان در مدیریت اشیا به روش ساده و آسان کمک می‌کند.قبل از اینکه به قابلیت‌های ارائه‌شده توسط کلاس نگاه کنیم، اجازه دهید ابتدا به یکی از اشکالات عمده کد که در بالا نوشته شده نگاه کنیم. می‌توانیم قوانینی را که در بالا نوشته شده را تغییر دهیم.1 p1 = {'name' : &quotABC&quot , 'street': &quotCentral Street - 1&quot } 2 p2 = {'names' : &quotDEF&quot , 'street': &quotCentral Street - 2&quot, &quotNewVar&quot : &quotNot Needed&quot }# and 3 class PostalAddress: 4 pass 5 cP1 = PostalAddress() 6 cP1.name = &quotABC&quot 7 cP2 = PostalAddress() 8 cP2.names = &quotDEF&quot 9 cP2.NewVar = &quotNot Needed&quotاشتباهاتی که در بالا صورت گرفت در خط 2 اضافه کردن کلید NewVar به شی p2 و همچنین در خط 8 اضافه کردن کلید names به شی cP2 که هر کدام بدون مشکل اجرا خواهند ولی هیچ نظمی در کار نیست همان طرح کلی که از بروز خطا در برنامه های سنگین جلوگیری کند پس باز هم به کلاس با طرح کلی میرسیم که روش مناسب تری است https://vrgl.ir/uWhBv