|
| 1 | +.. role:: emoji-size |
| 2 | + |
| 3 | +.. meta:: |
| 4 | + :description: کتاب آموزش زبان برنامه نویسی پایتون به فارسی، آموزش شی گرایی در پایتون، OOP در پایتون، Decorators در پایتون، Descriptors در پایتون، Properties در پایتون، دیتا کلاس در پایتون، Data Classe در پایتون |
| 5 | + :keywords: آموزش, آموزش پایتون, آموزش برنامه نویسی, پایتون, Decorators, کتابخانه, پایتون, شی گرایی در پایتون, Descriptors,Properties |
| 6 | + |
| 7 | + |
| 8 | +درس ۲۱: شی گرایی (OOP) در پایتون: Descriptors ،Decorator ،Data Class و Properties |
| 9 | +=================================================================================================== |
| 10 | + |
| 11 | + |
| 12 | +توجه داشته باشید، هم اکنون پشتیبانی نسخه 2x پایتون به پایان رسیده است. بنابراین همانند دروس پیش شی گرایی و به منظور جلوگیری از پیچیدگیهای غیر ضروری، تمام مطالب این درس بر مبنای پایتون 3x ارائه میشود. |
| 13 | + |
| 14 | + |
| 15 | + |
| 16 | +:emoji-size:`✔` سطح: متوسط |
| 17 | + |
| 18 | +---- |
| 19 | + |
| 20 | + |
| 21 | +.. contents:: سرفصلها |
| 22 | + :depth: 2 |
| 23 | + |
| 24 | +---- |
| 25 | + |
| 26 | + |
| 27 | +Data Classes |
| 28 | +---------------------------- |
| 29 | + |
| 30 | + |
| 31 | + |
| 32 | + |
| 33 | +Decorators |
| 34 | +---------------------------- |
| 35 | + |
| 36 | +از درس سیزدهم با مفهوم Decoratorها و نیز کاربرد آنها به همراه تابع در زبان برنامهنویسی پایتون آشنا شدهایم، در این بخش به بررسی Decoratorهابه همراه کلاسها و متدها میپردازیم. |
| 37 | + |
| 38 | +علاوه بر اینکه با استفاده از کلاس میتوان یک Decorator ایجاد کرد، از Decoratorها نیز میتوان بر روی کلاس یا متدهای داخل یک کلاس بهره گرفت. در ادامه به بررسی این موارد میپردازیم. |
| 39 | + |
| 40 | + |
| 41 | +قراردادن Decorator بر روی متد |
| 42 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 43 | + |
| 44 | +این کار همانند قراردادن Decorator بر روی تابع میباشد (درس سیزدهم) و تفاوتی ندارد. پیشتر نیز از Decoratorهایی همچون ``classmethod@`` یا ``staticmethod@`` بر روی متدها استفاده میکردیم. به مثالی در همین زمینه توجه نمایید: |
| 45 | + |
| 46 | + |
| 47 | +.. code-block:: python |
| 48 | + :linenos: |
| 49 | +
|
| 50 | + import functools |
| 51 | +
|
| 52 | + def debug(func): |
| 53 | + """Print the function signature and return value |
| 54 | + Source: https://realpython.com/primer-on-python-decorators/#debugging-code""" |
| 55 | +
|
| 56 | + @functools.wraps(func) |
| 57 | + def wrapper_debug(*args, **kwargs): |
| 58 | + args_repr = [repr(a) for a in args] |
| 59 | + kwargs_repr = [f"{k}={v!r}" for k, v in kwargs.items()] |
| 60 | + signature = ", ".join(args_repr + kwargs_repr) |
| 61 | + print(f"Calling {func.__name__}({signature})") |
| 62 | + value = func(*args, **kwargs) |
| 63 | + print(f"{func.__name__!r} returned {value!r}") |
| 64 | + return value |
| 65 | + return wrapper_debug |
| 66 | +
|
| 67 | +
|
| 68 | +
|
| 69 | + class Sample: |
| 70 | +
|
| 71 | + @debug |
| 72 | + def __init__(self, x=0, y=0): |
| 73 | + self.x = x |
| 74 | + self.y = y |
| 75 | +
|
| 76 | +
|
| 77 | + sample = Sample(5, y=6) |
| 78 | +
|
| 79 | +:: |
| 80 | + |
| 81 | + Calling __init__(<__main__.Sample object at 0x7fd96ddec8d0>, 5, y=6) |
| 82 | + '__init__' returned None |
| 83 | + |
| 84 | +در نمونه کد بالا یک Decorator با نام ``debug`` ایجاد گردیده است (Decorator درس سیزدهم و f-string درس هفتم)، با قراردادن این Decorator بر روی یک تابع یا متد: نام تابع، آرگومانهای ارسال شده و همچنین مقدار خروجی تابع را بر روی خروجی نمایش میدهد. |
| 85 | + |
| 86 | + |
| 87 | + |
| 88 | +قراردادن Decorator بر روی کلاس |
| 89 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 90 | + |
| 91 | + |
| 92 | + |
| 93 | +کلاس به عنوان Decorator |
| 94 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 95 | + |
| 96 | + |
| 97 | + |
| 98 | +Descriptors |
| 99 | +---------------------------- |
| 100 | + |
| 101 | + |
| 102 | + |
| 103 | +Properties |
| 104 | +---------------------------- |
| 105 | + |
| 106 | + |
| 107 | + |
| 108 | + |
| 109 | +| |
| 110 | +
|
| 111 | +---- |
| 112 | + |
| 113 | +:emoji-size:`😊` امیدوارم مفید بوده باشه |
| 114 | + |
| 115 | +`لطفا دیدگاه و سوالهای مرتبط با این درس خود را در کدرز مطرح نمایید. <https://www.coderz.ir/python-tutorial-oop-descriptors-properties>`_ |
| 116 | + |
| 117 | + |
| 118 | + |
0 commit comments