|
248 | 248 | |
249 | 249 | @abstractmethod |
250 | 250 | def abs_instance_method(self): |
251 | | - pass |
| 251 | + """This method should implement how to .....""" |
252 | 252 | |
253 | 253 | @classmethod |
254 | 254 | @abstractmethod |
255 | 255 | def abs_class_method(cls): |
256 | | - pass |
| 256 | + """This method should implement how to .....""" |
257 | 257 | |
258 | 258 | @staticmethod |
259 | 259 | @abstractmethod |
260 | 260 | def abs_static_method(): |
261 | | - pass |
| 261 | + """This method should implement how to .....""" |
262 | 262 |
|
263 | 263 | ۲- با استفاده از ارثبری کلاس ``ABC`` [`اسناد پایتون <https://docs.python.org/3/library/abc.html#abc.ABC>`__]، ``ABC`` یک کلاس کمکی است که متا کلاس آن ``ABCMeta`` میباشد و از نسخه 3.4 به پایتون افزوده شده است: |
264 | 264 |
|
|
272 | 272 | |
273 | 273 | @abstractmethod |
274 | 274 | def abs_instance_method(self): |
275 | | - pass |
| 275 | + """This method should implement how to .....""" |
276 | 276 | |
277 | 277 | @classmethod |
278 | 278 | @abstractmethod |
279 | 279 | def abs_class_method(cls): |
280 | | - pass |
| 280 | + """This method should implement how to .....""" |
281 | 281 | |
282 | 282 | @staticmethod |
283 | 283 | @abstractmethod |
284 | 284 | def abs_static_method(): |
285 | | - pass |
| 285 | + """This method should implement how to .....""" |
286 | 286 |
|
287 | 287 |
|
288 | | -
|
289 | | -.. tip:: |
290 | | - |
291 | | - در زبان برنامهنویسی پایتون: |
| 288 | +.. note:: |
| 289 | + در بحث کلاسهای Abstract زبان برنامهنویسی پایتون میبایست نکات زیر را در نظر داشت: |
292 | 290 |
|
293 | 291 | * کلاسهای Abstract میتوانند علاوه بر متدهای Abstract، شامل متدهای معمولی که پیشتر شرح داده شد نیز باشند. |
294 | 292 |
|
295 | 293 | * نمیتوان از کلاسهای Abstract شی ایجاد کرد، این نوع کلاس فاقد عملیات نمونهسازی میباشد. |
296 | 294 |
|
297 | | - * متدهای Abstract با استفاده از دکوراتور ``abstractmethod@`` از ماژول ``abc`` ایجاد میگردد. |
| 295 | + * متدهای Abstract با استفاده از دکوراتور ``abstractmethod@`` از ماژول ``abc`` ایجاد میگردد. |
298 | 296 |
|
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 را نیز فراخوانی کنند. |
300 | 302 |
|
| 303 | + * کلاسهای Abstract میتوانند مانند دیگر کلاسها در چند سطح از سلسله مراتب وراثت شرکت کنند (از یکدیگر ارثبری داشته باشند)، بنابراین باید توجه داشت که تنها subclassهایی که تمام متدهای Abstract مربوط به superclassهای خود را پیادهسازی کرده باشد به عنوان یک کلاس نرمال یا به اصطلاح Concrete حساب میشود و میتوان از آن نمونهسازی کرد، در غیر این صورت مفسر پایتون آن کلاس را به عنوان یک کلاس Abstract در نظر میگیرد و اجازه نمونهسازی از آن را نخواهد داد. |
301 | 304 |
|
302 | 305 | | |
303 | 306 |
|
|
0 commit comments