
abc.open, read, write ו-close, ומחלקות יורשות ממשות כל אחת בדרך שלה, למשל write שמוודא שהמידע נכתב.abc ומגדירים במחלקה הבסיסית את המטא-קלאס שלו. כך פייתון בודקת את חוקיות המחלקה.@abstractmethod. פונקציה בלי הסימון לא מחייבת דריסה.הטקסט המלא של הדקות הראשונות בהרצאה «פייטון Object Oriented - חלק 3» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכולם, השיעור הזה מדבר על דיזיין בפייתון ועל אפסטרט קלאסס. אז אפסטרט קלאסס, שהוא דבר שקיים למשל ב-C++, זה אומר שזה קלאס שאי אפשר ליצור אינסטנט שלו, אלא הוא רק נועד כדי שירשו ממנו ויעשו אובריידינג לאחת או לכמה מהפונקציות שלו.
בפייתון בגדול אין לנו כזה דבר, עד לאחרונה לא היה בכלל. בשלב כלשהו החליטו כן להוסיף את זה. אני אראה דוגמא איך היו עושים את זה לפני ואיך עושים את זה מעכשיו.
כמו כן בפייתון אין אינטרפייסים. מצד שני יש ירושה מרובה וככה בעצם אפשר סוג של כמו אינטרפייסים, אתה פשוט יורש מכמה קלאסים אחרים ואתה מקבל את אותו אפקט.
אז דבר ראשון, מה זה Abstract Class? אז כמו שאמרתי, אבסטרקט קלאס זה קלאס שאי אפשר ליצור ממנו עותק, אלא הוא רק בא לתאר איזשהו משהו.
למשל, אתה רוצה לתאר משהו, מנגנון של פתיחת קבצים. אז אתה אומר, אוקיי, כל מי שרוצה לפתוח קובץ צריך שיהיה לו את הפונקציה open, read, write, close.
אז אתה יוצר אבסטרקט קלאס שיש בו את הפונקציות open, read, write ו-close, ואז כל אחד שרוצה ליצור קלאס שמטפל בקבצים אבל בצורה קצת שונה, יורש מהקלאס הזה ומממש את הפונקציות בצורות אחרות.
למשל, אתה יכול להגיד שאתה רוצה שהפונקציה right תעשה right ותעשה flash, כלומר שהיא תוודא שהמידע נכתב או שהיא תעשה right באיזשהו קידוד מסוים. זו דוגמה קלאסית לירושה.
אז ברגע שיש לך אבסטרט קלאס שכולם יורשים ממנו וכופים את ה... אתה בעצם כופה על כל מי שיורש ממך לשמור על ההתנהגות הזאת. עכשיו, כל הדבר הזה של אבסטרט קלאס הוא קצת מנוגד לטבע של פייתון, שהיא שפה שהיא הרבה יותר חופשית, שאתה יכול לשנות דברים תוך כדי ריצה ושום דבר
הוא לא באמת פרייבט. לכן בהתחלה לא היה את הדבר הזה של אבסטרט קלאס. עם הזמן הייתה לזה קצת דרישה מהקהל של המפתחים, אז הוסיפו לזה תמיכה.
בואו נראה איך הוסיפו לזה תמיכה. כדי לעבוד עם abstract class ולכפות בעצם על מי שיורש ממני לממש פונקציות, מה שאני צריך לעשות דבר ראשון זה לעשות import לפקאג' מודול שנקרא ABC. בתוך ה-base class אני צריך להוסיף את השורה הזאת.
מה שכתוב כאן זה underscore, underscore, meta class שווה ל-abc.abc.meta. ממש בקטנה אני אסביר ש-meta class זה מה שבעצם מייצר, מתאר את הקלאס.
כלומר, כשאני רוצה ליצור את הבייס קלאס, בסופו של דבר אני קורא למשהו שנקרא מטה קלאס, שנמצא בתוך הקלאס שלי. ומה שאני בעצם אומר פה בפייתון, בקוד, בשורה הזאת, זה שהבפנוכו, כלומר הבפנים של הקלאס בייס שלי, המטה קלאס שלי, הוא מסוג ABC מטה, ששם יש מנגנון שבודק את
החוקיות של האבסקמנט. לכן השורה הזאת הכרחית. כמו כן עבור כל פונקציה שאני ארצה לכפות על מי שיורש ממני לממש אני צריך להוסיף שטרודל ואז ABC נקודה אבסטרק מסוד כמובן שפונקציות אחרות שהן לא למשל סתם פונקציה שנקראת foo שאותה אני לא באמת רוצה לחייב מישהו לרשת ולדרוס אני פשוט יכול לעשות
נכתוב אותה כך ובלי לציין את האבסטרקט מסוד ואני לא אהיה חייב לדרוס אותה. אז יש לנו את הפונקציה בייס שהיא אבסטרקטית, יש לנו את הפונקציה derived שהיא יורשת מבייס, כפי שאתם רואים פה בסוגריים.
בואו ננסה דבר ראשון, ניצור אינסטנס של בייס. אז בואו ניצור בייס. אז אנחנו יוצרים בייס. שימו לב לשגיאה, cannot initiate abstract class.
בייס קלאס וויס אבסטרקט ות'וד איי אם כלומר פייתון מודיע לנו אתה לא יכול ליצור אינסטנט של בייס כי יש לך פה פונקציה שנקראת איי אם שהיא אבסטרקטית בואו נמשיך עכשיו בואו ננסה ליצור מופע של דרייבד