Skip to content

Commit 2aaf3f3

Browse files
author
Saeid Darvish
committed
l19: Metaclass is completed ++
1 parent d382ef5 commit 2aaf3f3

1 file changed

Lines changed: 2 additions & 3 deletions

File tree

lessons/l19.rst

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,7 @@
7979

8080
در واقع ``type`` کلاسی است که تمام کلاس‌های پایتون به صورت پیش‌فرض از روی آن ایجاد می‌گردند. ``type`` یک متا کلاس است و پایتون این قابلیت را به شما می‌دهد که متا کلاس خودتان را بسازید، بنابراین می‌توانید کلاس‌هایی بسازید که یک شی از متا کلاس شما هستند، هیجان انگیز نیست؟! اکثر زبان‌های برنامه‌نویسی تنها یک پیاده‌سازی پیش‌فرض در اختیار برنامه‌نویس قرار می‌دهند ولی این قابلیت در پایتون امکانات قدرتمندی برای برنامه‌نویس فراهم می‌آورد همچون thread-safety، مدیریت کامل فرآیند ایجاد شی و...
8181

82-
ایجاد متاکلاس
83-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
82+
ایجاد یک متاکلاس در پایتون به صورت زیر می‌باشد:
8483

8584
::
8685

@@ -98,7 +97,7 @@
9897
>>> type(Sample)
9998
<class '__main__.SampleMetaClass'>
10099

101-
برای ایجاد متا کلاس تنها کافی است یک کلاس جدید بسازید که از کلاس ``type`` ارث‌بری داشته باشد. با ارسال نام این کلاس به پارامتر ``metaclass`` هر کلاس دیگری می‌توان به آن‌ها انتساب داد.
100+
برای ایجاد متا کلاس تنها کافی است یک کلاس جدید بسازید که از کلاس ``type`` ارث‌بری داشته باشد. با ارسال نام این کلاس به پارامتر ``metaclass`` هر کلاس دیگری، می‌توان متا کلاس ایجاد شده را به جای متا کلاس پیش‌فرض (``type``) به آن‌ کلاس‌ها انتساب داد. ایجاد متاکلاس کاربردهای جالبی دارد و قطعا قدرت برنامه‌نویس را در مدیریت فرآیند ایجاد اشیا بیشتر می‌کند. در ادامه سعی خواهیم کرد با ایجاد یک متا کلاس روند کامل ایجاد یک شی در پایتون را خودمان پیاده‌سازی کنیم!
102101

103102
بحث اشیای Callable را از درس هفدهم به یاد آورید - هر کلاس در پایتون یک شی از متاکلاس مربوط به خودش می‌باشد، همچنین گفته شد کلاس‌ها در پایتون Callable هستند، بنابراین هرگاه یک کلاس فراخوانی می‌شود (در واقع زمانی که یک شی از آن کلاس ایجاد می‌گردد)، به صورت خودکار متد ``__call__`` متا کلاس آن نیز فراخوانی می‌گردد.
104103

0 commit comments

Comments
 (0)