The Maz Life
The Maz Life
خواندن ۵ دقیقه·۵ سال پیش

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

in Python search
in Python search

شیوه فکر راجع به مسئله و سازماندهی کدها متفاوت است بعضی ها رویه ای هستن بعضی ها شی گرایی
که امروزه بیشتر برنامه نویسی ها بسته به مسئله شیوه فکرشون از نوع شی گرایی هست که ما تو این مقاله بهش میپدازیم:
1-شی گرایی چیست؟
راهی برای ایجاد و مدیریت اشیاء ارائه می دهند و کارش این است که برنامه دارای ساختار و اسکلت باشد
2-در اینجا منظور از یک شی چیست؟
شی به دو صورت استاتیک و داینامیک موجود هست که به بررسی هر کدام خواهیم پرداخت
1- استاتیک
حالت استاتیک یک جسم را نشان دهد، یعنی اشیا تغییر نمی‌کنند، با ویژگی‌هایی که به عنوان کلید (نام)و مقدار های آن ذکر شده‌اند.

به عنوان مثال، اجازه دهید آدرس پستی مردم را در یک جامعه محلی در نظر بگیریم، ما می‌توانیم آدرس‌های فردی را نمایش دهیم

مثال 1-1

p1 = {'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-1

class PostalAddress: pass

2-کلاس با طرح کلی:

https://vrgl.ir/uWhBv


ما می‌توانیم به دو روش به کلاس دسترسی داشته باشیم: بدون ایجاد شی و ایجاد یک شی.

بدون ایجاد یک شی

به منظور دستیابی به عملکرد درون کلاس، تمام کاری که باید انجام دهید این است که کلاس را با نام کلاس خود صدا کنید وسپس "."و بعد از آن تابع موجود در کلاس را صدا بزنید . در کلاس های که طرح کلی یا بدنه ندارند این طور فراخوانی با error همراه خواهد بود

مثال 3-1

PostalAddress.designer() #error PostalAddress.first_appeared() #error

با ساختن شی

مثال 4-1

cP1 = 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-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[&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
پایتونشی گراییکلاسشی
جستجوگر در عالم مجاز و حقیقت
شاید از این پست‌ها خوشتان بیاید