מטא-תכנות
מתייחס לטכניקות שבהן קוד מתייחס לקוד כאל נתונים – כלומר, קוד פייתון שמסוגל לשנות או לנתח קוד פייתון אחר (כמו שינוי מחלקות, פונקציות ועוד בזמן ריצה).
האופי הדינמי של פייתון מאפשר גמישות רבה במטא-תכנות – מה שיכול להוביל לתבניות עוצמתיות, אך דורש זהירות לשמירה על קריאות ותחזוקה של הקוד.
יצירת מחלקות דינמית עם type()
לפונקציה המובנית type() יש שני שימושים:
- type(obj) מחזירה את סוג האובייקט.
- type(name, bases, attrs_dict) יוצרת מחלקה חדשה בזמן ריצה.
כך type כמטא-קלאס יוצר מחלקות מאחורי הקלעים.
דוגמה:
כאן אנחנו יוצרים מחלקה בזמן ריצה עם:
- "DynamicHello" כשם המחלקה
- (object,) כטווח ירושה
- מילון attrs שבו מוגדרת המתודה greet
שיטה זו שימושית כשצריך לבנות מחלקות בצורה תכנותית – כמו בפרוקסים, factories, או כשיוצרים מחלקות מתוך סכמות מסד נתונים או פרוטוקולי תקשורת.
הוספת שדות ומתודות בזמן ריצה
גם מבלי להשתמש ישירות ב־type(), פייתון מאפשרת להוסיף שדות למחלקות ולאובייקטים תוך כדי ריצה:
python
שיטה זו גמישה אך עשויה לסבך ניפוי שגיאות אם נעשה בה שימוש לא זהיר.
לעיתים קרובות ניתן להשתמש בפתרונות פשוטים יותר כמו closures או factory functions.