Skip to content

Commit 728b3d9

Browse files
author
Saeid Darvish
committed
l19: working on abstract
1 parent 8d68776 commit 728b3d9

1 file changed

Lines changed: 15 additions & 12 deletions

File tree

lessons/l19.rst

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -248,17 +248,17 @@
248248
249249
@abstractmethod
250250
def abs_instance_method(self):
251-
pass
251+
"""This method should implement how to ....."""
252252
253253
@classmethod
254254
@abstractmethod
255255
def abs_class_method(cls):
256-
pass
256+
"""This method should implement how to ....."""
257257
258258
@staticmethod
259259
@abstractmethod
260260
def abs_static_method():
261-
pass
261+
"""This method should implement how to ....."""
262262
263263
۲- با استفاده از ارث‌بری کلاس ``ABC`` [`اسناد پایتون <https://docs.python.org/3/library/abc.html#abc.ABC>`__]، ``ABC`` یک کلاس کمکی است که متا کلاس آن ``ABCMeta`` می‌باشد و از نسخه 3.4 به پایتون افزوده شده است:
264264

@@ -272,32 +272,35 @@
272272
273273
@abstractmethod
274274
def abs_instance_method(self):
275-
pass
275+
"""This method should implement how to ....."""
276276
277277
@classmethod
278278
@abstractmethod
279279
def abs_class_method(cls):
280-
pass
280+
"""This method should implement how to ....."""
281281
282282
@staticmethod
283283
@abstractmethod
284284
def abs_static_method():
285-
pass
285+
"""This method should implement how to ....."""
286286
287287
288-
289-
.. tip::
290-
291-
در زبان برنامه‌نویسی پایتون:
288+
.. note::
289+
در بحث کلاس‌های Abstract زبان برنامه‌نویسی پایتون می‌بایست نکات زیر را در نظر داشت:
292290

293291
* کلاس‌های Abstract می‌توانند علاوه بر متدهای Abstract، شامل متدهای معمولی که پیش‌تر شرح داده شد نیز باشند.
294292

295293
* نمی‌توان از کلاس‌های Abstract شی ایجاد کرد،‌ این نوع کلاس فاقد عملیات نمونه‌سازی می‌باشد.
296294

297-
* متدهای Abstract با استفاده از دکوراتور ``abstractmethod@`` از ماژول ``abc`` ایجاد می‌گردد.
295+
* متدهای Abstract با استفاده از دکوراتور ``abstractmethod@`` از ماژول ``abc`` ایجاد می‌گردد.
298296

299-
* متدهای Abstract مانند هر متدی دیگری در پایتون می‌توانند از انواع Instance Method یا Class Method یا Static Method باشند.
297+
* متدهای Abstract مانند هر متدی دیگری در پایتون می‌توانند از انواع Instance Method یا Class Method یا Static Method باشند. توجه داشته باشید که این قانون در مورد Class Method و Static Method از نسخه 3.3 به بعد پایتون پشتیبانی می‌گردد.
298+
299+
* معمولا بدنه متدهای Abstract می‌بایست بدون پیا‌ده‌سازی باشند، این کار می‌تواند با قرار دادن دستورهایی همچون ``pass`` یا ``return`` یا ``return None`` نیز انجام شود ولی بهترین کار استفاده از Docstring می‌باشد (درس ششم)، با یک تیر دو نشان خواهید زد!
300+
301+
* هیچ اجباری به خالی بودن بدنه (عدم پیاده‌سازی) متدهای Abstract در داخل کلاس Abstract نیست، این متدها در کلاس Abstract می‌توانند شامل یک پیاده‌سازی پیش‌فرض باشند، که اشیا subclassها در صورت نیاز می‌توانند با استفاده از تابع ``()super`` (همانطور که پیش‌تر شرح داده شد)، متد نظیر کلاس Abstract را نیز فراخوانی کنند.
300302

303+
* کلاس‌های Abstract می‌توانند مانند دیگر کلاس‌ها در چند سطح از سلسله مراتب وراثت شرکت کنند (از یکدیگر ارث‌بری داشته باشند)، بنابراین باید توجه داشت که تنها subclassهایی که تمام متدهای Abstract مربوط به superclassهای خود را پیاده‌سازی کرده باشد به عنوان یک کلاس نرمال یا به اصطلاح Concrete حساب می‌شود و می‌توان از آن نمونه‌سازی کرد، در غیر این صورت مفسر پایتون آن کلاس را به عنوان یک کلاس Abstract در نظر می‌گیرد و اجازه نمونه‌سازی از آن را نخواهد داد.
301304

302305
|
303306

0 commit comments

Comments
 (0)