Skip to content

Commit b0794b4

Browse files
author
Saeid Darvish
committed
l17: Instance methods
1 parent f968a6a commit b0794b4

1 file changed

Lines changed: 60 additions & 8 deletions

File tree

lessons/l17.rst

Lines changed: 60 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,11 @@
1010

1111

1212

13-
پیش‌تر مفهوم شی‌گرایی شرح داده شده است (درس پنجم). در این درس می‌خواهیم به بررسی چگونگی پیاده‌سازی این مفهوم در زبان برنامه نویسی پایتون بپردازیم. پیش‌‌نیاز این درس مطالعه درس پنجم است.
13+
پیش‌تر مفهوم شی‌گرایی شرح داده شده است (درس پنجم). در این درس می‌خواهیم به بررسی چگونگی پیاده‌سازی این مفهوم در زبان برنامه نویسی پایتون بپردازیم. هنگام نگارش این درس فرض بر این بوده است که خوانندگان دروس پیش، بخصوص درس پنجم و دروس مربوط به توابع را مطالعه کرده‌اند.
1414

15-
توجه داشته باشید، هم اکنون پشتیبانی نسخه 2x پایتون به پایان رسیده است. بنابراین به منظور جلوگیری از پیچیدگی‌های غیر ضروری، تمام مطالب این درس بر مبنای پایتون 3x ارايه خواهد شد.
15+
این درس بر ارائه تعاریف مربوط به کلاس (Class) و شی (Object) از مفاهیم شی‌گرایی حاکم در زبان برنامه‌نویسی پایتون تمرکز دارد و مفاهیم باقی مانده در دروس آتی ارائه خواهند شد.
16+
17+
توجه داشته باشید، هم اکنون پشتیبانی نسخه 2x پایتون به پایان رسیده است. بنابراین برخلاف دروس پیشین و به منظور جلوگیری از پیچیدگی‌های غیر ضروری، تمام مطالب این درس بر مبنای پایتون 3x ارائه می‌شود.
1618

1719

1820

@@ -31,9 +33,9 @@
3133

3234
همان‌طور که پیش‌تر نیز گفته شده است، پایتون یک زبان برنامه‌نویسی چند الگویی (multi-paradigm) است و از الگوهای مختلفی از جمله شی گرایی پشتیبانی می‌کند. شی گرایی یک الگوی برنامه‌نویسی یا روشی برای طراحی کدهای برنامه است.
3335

34-
در این شیوه کدهای برنامه در قالب موجودیت‌های کوچکی به نام **کلاس (Class)** به وجود می‌آیند. کلاس‌ها چیزی نیستند جز ابزاری که توسط آن می‌توان داده‌ها و عملیات مرتبط با یکدیگر را در یک دسته و جدا از سایر بخش‌های کد قرار داد. با کمک کلاس‌ها رفتار و عملکرد هر تکه از کد مشخص است و با سایر بخش‌های کد تداخل پیدا نمی‌کند. ایجاد یک کلاس به معنی ایجاد یک **نوع (Type)** جدید در برنامه می‌باشد که می‌توان چندین **شی (Object)** یا **نمونه (Instance)** از آن نوع ایجاد کرد. یک برنامه شی‌گرا حاصل ارتباط و تعامل اشیا مختلف ایجاد شده در آن است.
36+
در این شیوه، کدهای برنامه در قالب موجودیت‌های کوچکی به نام **کلاس (Class)** به وجود می‌آیند. کلاس‌ها چیزی نیستند جز ابزاری که توسط آن می‌توان داده‌ها و عملیات مرتبط با یکدیگر را در یک دسته و جدا از سایر بخش‌های کد قرار داد. با کمک کلاس‌ها رفتار و عملکرد هر تکه از کد مشخص است و با سایر بخش‌های کد تداخل پیدا نمی‌کند. ایجاد یک کلاس به معنی ایجاد یک **نوع (Type)** جدید در برنامه می‌باشد که می‌توان چندین **شی (Object)** یا **نمونه (Instance)** از آن نوع ایجاد کرد. یک برنامه شی‌گرا حاصل ارتباط و تعامل اشیا مختلف ایجاد شده در آن است.
3537

36-
مفاهیم زیادی از پایتون تا پیش از این درس مطرح شده است که باید بدانیم که تمام آن‌ها از پیاده‌سازی شی گرا پیروی می‌کردند. هر چیزی در پایتون یک شی است. انواع داده مانند اعداد، رشته، لیست یا دیکشنری همگی شی بودند - نمونه‌هایی که از کلاس‌های مربوط به خود ایجاد شده‌اند. حتی تعریف تابع نیز به معنی ایجاد یک شی از کلاس متناطر آن بوده است. اما حالا می‌خواهیم نوع یا کلاس‌های مورد نظر خودمان را در برنامه ایجاد و اشیایی از این کلاس‌ها نمونه سازی کنیم. در ادامه به شرح این روند خواهیم پرداخت.
38+
مفاهیم زیادی از پایتون تا پیش از این درس مطرح شده است، باید بدانیم که تمام آن‌ها از پیاده‌سازی شی گرا پیروی می‌کردند. هر چیزی در پایتون یک شی است. انواع داده مانند اعداد، رشته، لیست یا دیکشنری همگی شی بودند - نمونه‌هایی که از کلاس‌های مربوط به خود ایجاد شده‌اند. حتی تعریف تابع نیز به معنی ایجاد یک شی از کلاس متناطر آن بوده است. اما حالا می‌خواهیم نوع یا کلاس‌های مورد نظر خودمان را در برنامه ایجاد و اشیایی از این کلاس‌ها نمونه سازی کنیم. در ادامه به شرح این روند خواهیم پرداخت.
3739

3840

3941
تعریف کلاس (Class)
@@ -163,6 +165,15 @@
163165
* معمولا ``__new__`` زمانی پیاده‌سازی می‌شود که بخواهیم محدودیت‌هایی در ایجاد شی کلاس مورد نظر ایجاد کنیم. برای نمونه در پیاده‌سازی طرح Singleton [`ویکی‌پدیا <https://en.wikipedia.org/wiki/Singleton_pattern>`__] یک کلاس.
164166

165167

168+
169+
صفات (Attributes)
170+
-----------------------------------------------------
171+
172+
صفات یا ویژگی‌ها که در شی گرایی
173+
174+
175+
176+
166177
متد (Method)
167178
-----------------------------------------------------
168179

@@ -193,8 +204,48 @@
193204
متد شی (Instance Method)
194205
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
195206

196-
رایج‌ترین نوع متد در پایتون است. برای ایجاد این متد نیازی به دکوراتور (Decorator‌ - درس سیزدهم) نیست. همانطور که از نام این متد مشخص است این متد تنها از سوی اشیا یک کلاس قابل استفاده است. هر شی از کلاس صفات (Attributes - *کمی جلوتر شرح داده خواهد شد*) خاص خود را دارد که از این متدها می‌توان برای دستیابی، دستکاری و مدیریت آن‌ها استفاده کرد.
207+
رایج‌ترین نوع متد در پایتون است. برای ایجاد این متد نیازی به دکوراتور (Decorator‌ - درس سیزدهم) نیست. همانطور که از نام این متد مشخص است این متد تنها از سوی اشیا یک کلاس قابل استفاده است. هر شی از کلاس صفات (Attributes - *کمی جلوتر شرح داده خواهد شد*) خاص خود را دارد که از این متدها می‌توان برای دستیابی، دستکاری آن‌ها استفاده کرد.
197208

209+
این نوع متد همواره می‌بایست حداقل یک پارامتر داشته باشد. پارامتر نخست که معمولا ``self`` نام‌گذاری می‌شود حاوی شی جاری از کلاس است - در واقع همان شی ای که این متد را فراخوانی کرده است. این مقدار همواره از سوی مفسر پایتون ارسال می‌گردد و نیازی به ارسال از سوی برنامه‌نویس ندارد:
210+
211+
.. code-block:: python
212+
:linenos:
213+
214+
class Sample():
215+
216+
def __init__(self, char='*'):
217+
self.character = char
218+
219+
def multiply_print(self, count=1):
220+
print(self.character * count)
221+
222+
223+
sample_1 = Sample() # Instantiating a new Object
224+
225+
sample_1.multiply_print()
226+
sample_1.multiply_print(10)
227+
228+
print('-' * 30)
229+
230+
sample_2 = Sample('#') # Instantiating a new Object
231+
232+
sample_2.multiply_print()
233+
sample_2.multiply_print(10)
234+
235+
::
236+
237+
*
238+
**********
239+
------------------------------
240+
#
241+
##########
242+
243+
244+
گفته شده که متد ``__init__`` جزیی از مفهوم Constructor کلاس‌های پایتون بوده و برای شخصی‌سازی یک شی در زمان ایجاد آن به کار می‌رود - کاربرد معمول: افزودن Attribute (*که در بخش‌های آتی شرح داده می‌شود*) به شی است. در نمونه کد بالا، این متد یک پارامتر char دریافت می‌کند - این پارامتر مقدار پیش‌فرض ``*`` را دارد، بنابراین ارسال آرگومان متناظر برای آن اجباری نیست (تابع در پایتون - درس دوازدهم). با این کار می‌توانیم در زمان نمونه‌سازی شی، یک Attribute با نام character در آن تعریف نماییم (سطر ۴). ما می‌خواهیم مقدار Attribute یا صفت character از هر شی را به تعداد دلخواه چاپ نماییم، از آنجا که این مقدار یک صفتِ متعلق به شی است و در ازای هر شی این مقدار می‌تواند متفاوت باشد پس ما برای این کار می‌بایست که یک Instance Method در بدنه کلاس تعریف کنیم (متد ``multiply_print`` ) - چرا که تنها در این صورت است که می‌توانیم به ``self`` دسترسی داشته باشیم و مقدار صفت character را از آن دستیابی کنیم.
245+
246+
.. tip::
247+
248+
Instance Method‌ها تنها می‌توانند توسط اشیا فراخوانی شوند. روند فراخوانی یک متد توسط شی نیز به صورت نام شی + کاراکتر ``.‍‍`` + نام متد می‌باشد.
198249

199250

200251

@@ -207,15 +258,16 @@
207258
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
208259

209260

261+
262+
210263
متدهای جادویی (Magic methods)
211264
-----------------------------------------------------
212265

213266

214267

215-
صفات (Attributes)
216-
-----------------------------------------------------
268+
هر چیزی در پایتون یک شی است
269+
---------------------------------------------------------------------------------------
217270

218-
صفات یا ویژگی‌ها که در شی گرایی
219271

220272

221273
|

0 commit comments

Comments
 (0)