You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: lessons/l19.rst
+2-3Lines changed: 2 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -79,8 +79,7 @@
79
79
80
80
در واقع ``type`` کلاسی است که تمام کلاسهای پایتون به صورت پیشفرض از روی آن ایجاد میگردند. ``type`` یک متا کلاس است و پایتون این قابلیت را به شما میدهد که متا کلاس خودتان را بسازید، بنابراین میتوانید کلاسهایی بسازید که یک شی از متا کلاس شما هستند، هیجان انگیز نیست؟! اکثر زبانهای برنامهنویسی تنها یک پیادهسازی پیشفرض در اختیار برنامهنویس قرار میدهند ولی این قابلیت در پایتون امکانات قدرتمندی برای برنامهنویس فراهم میآورد همچون thread-safety، مدیریت کامل فرآیند ایجاد شی و...
81
81
82
-
ایجاد متاکلاس
83
-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
82
+
ایجاد یک متاکلاس در پایتون به صورت زیر میباشد:
84
83
85
84
::
86
85
@@ -98,7 +97,7 @@
98
97
>>> type(Sample)
99
98
<class '__main__.SampleMetaClass'>
100
99
101
-
برای ایجاد متا کلاس تنها کافی است یک کلاس جدید بسازید که از کلاس ``type`` ارثبری داشته باشد. با ارسال نام این کلاس به پارامتر ``metaclass`` هر کلاس دیگری میتوان به آنها انتساب داد.
100
+
برای ایجاد متا کلاس تنها کافی است یک کلاس جدید بسازید که از کلاس ``type`` ارثبری داشته باشد. با ارسال نام این کلاس به پارامتر ``metaclass`` هر کلاس دیگری، میتوان متا کلاس ایجاد شده را به جای متا کلاس پیشفرض (``type``) به آن کلاسها انتساب داد. ایجاد متاکلاس کاربردهای جالبی دارد و قطعا قدرت برنامهنویس را در مدیریت فرآیند ایجاد اشیا بیشتر میکند. در ادامه سعی خواهیم کرد با ایجاد یک متا کلاس روند کامل ایجاد یک شی در پایتون را خودمان پیادهسازی کنیم!
102
101
103
102
بحث اشیای Callable را از درس هفدهم به یاد آورید - هر کلاس در پایتون یک شی از متاکلاس مربوط به خودش میباشد، همچنین گفته شد کلاسها در پایتون Callable هستند، بنابراین هرگاه یک کلاس فراخوانی میشود (در واقع زمانی که یک شی از آن کلاس ایجاد میگردد)، به صورت خودکار متد ``__call__`` متا کلاس آن نیز فراخوانی میگردد.
0 commit comments