PracticU

פייטון Object Oriented - חלק 2

בלי כתוביותעם כתוביות
PracticU › קורס פייתון - Python › פייטון Object Oriented - חלק 2
מילון מושגים:
אובייקט - יחידה בתכנות מונחה עצמים שמאגדת נתונים (תכונות) ופעולות (מתודות). נוצר בדרך כלל ממחלקה המשמשת כתבנית.
משתנה - שם שמפנה למקום בזיכרון שבו נשמר ערך שיכול להשתנות במהלך ריצת התוכנית, כמו מספר, טקסט או אובייקט.
מחלקה - תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
פרמטר - ערך שמועבר לפונקציה או לפקודה כקלט, ומשפיע על אופן פעולתן ועל התוצאה שהן מחזירות.

פייטון Object Oriented - חלק 2
השיעור ממשיך את נושא התכנות מונחה העצמים בפייתון ועוסק במשתנים סטטיים, בשיטות של מחלקה ובשיטות סטטיות. הדוגמה לאורך השיעור היא מחלקה בשם Person, ומטרתה לספור כמה אובייקטים נוצרו ממנה.
ספירת אובייקטים עם משתנה במחלקה
1. הגדרה מחוץ לאתחול: המשתנה המשותף מוגדר ישירות מתחת לשם המחלקה ולא בתוך __init__. הקונבנציה היא לכתוב את שמו באותיות גדולות, אם כי זה לא חובה בפייתון.
2. עדכון בכל יצירה: המשתנה מאותחל לאפס, ובתוך __init__ מוסיפים לו אחד בכל פעם שנוצר אובייקט חדש.
3. קריאה מכמה מקומות: אפשר לקרוא את המשתנה דרך אחד האובייקטים או דרך שם המחלקה, והערך יהיה זהה.
4. סדר החיפוש: כשקוראים למשתנה דרך אובייקט, פייתון בודקת קודם בתוך האובייקט, ורק אם לא מוצאת את השם היא בודקת במחלקה. לכן משתנה שנוסף לאובייקט מסתיר את ערך המחלקה.
5. מלכודת של self: אם כותבים self.<שם> += 1 במקום לעדכן את שם המחלקה, נוצר לכל אובייקט משתנה משלו. בדוגמה המחלקה נשארה עם 0, ואילו האובייקט שעודכן הציג 1.
שיטה סטטית ושיטת מחלקה
6. שיטה סטטית: פונקציה שנמצאת בתוך המחלקה, אבל לא מקבלת self ולא את המחלקה. היא לא יכולה לגשת לאובייקטים או למחלקה, ולכן היא מתנהגת כמו פונקציה רגילה שאפשר להעביר מחוץ למחלקה. בפועל משתמשים בה לקיבוץ פונקציות עזר שקשורות למערכת אחת.
7. שיטת מחלקה: פונקציה שמקבלת כפרמטר ראשון את המחלקה, בדרך כלל בשם cls. שם הפרמטר הוא קונבנציה בלבד, וגם self או this היו עובדים. שיטה כזו יכולה לגשת רק לשדות הסטטיים, ולא לשדות של אובייקט כמו name.
איך ניגשים למשתנה סטטי
השיעור מסיים בהבחנה שצריך לדעת דרך איזו גישה ניגשים לאובייקט הסטטי, כי לכל דרך יש השלכה אחרת על הפעולה של התוכנית. גישה דרך שם המחלקה נותנת את הערך המשותף, ואילו גישה דרך self עלולה ליצור משתנה מקומי שמסתיר אותו.
השיעור הבא בקורס: פייטון Object Oriented - חלק 3

פרקי ההרצאה: פייטון Object Oriented - חלק 2

  1. 00:00

    מבוא: משתנה שמשותף לכל המופעים

  2. 00:42

    הגדרת משתנה סטטי מחוץ לבנאי

  3. 01:22

    עדכון המונה בתוך הבנאי

  4. 04:00

    מה קורה כשניגשים למשתנה דרך מופע

  5. 05:02

    סדר החיפוש של פייתון: מופע ואז מחלקה

  6. 05:41

    הסתרת המשתנה הסטטי בתוך מופע

  7. 08:02

    שיתוף מידע בין מופעים וחיסכון בזיכרון

  8. 09:37

    הגדרת שיטה סטטית ומתי היא מיותרת

תמלול ההרצאה: פייטון Object Oriented - חלק 2

הטקסט המלא של הדקות הראשונות בהרצאה «פייטון Object Oriented - חלק 2» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:03

    שלום לכולם, השיעור הזה נמשיך לדבר על Object Oriented בפייתון, נדבר על Static בפייתון, מה זה אומר, מה זה בכלל, נדבר על הפונקציה New ו-Class, נדבר קצת על אופרטור Overloading ואולי עוד כמה דברים קטנים.

  2. 00:24

    אז בואו נתחיל. אז יש לנו פה פונקציה בסיסית, קלאס בסיסי שנקרא Person, שיש לו Name, Last Name ו-Age, ויש לו Overriding על STR, ובוא נגיד שעכשיו הייתי רוצה שדרך לספור כמה פעמים יצרתי את הפרסון, כמה אינסטנסים של פרסון יצרתי.

  3. 00:46

    אז בכל שפות תכנות יש משהו שנקרא סטטיק, גם בפייתון יש. סטטיק בפייתון זה פשוט משתנה שהוא הסקופ שלו, ההשמה שלו היא מתבצעת בתוך האינית, לא בתוך האינית אלא מתחת לקלאס עצמו.

  4. 01:04

    הקונבנציה לתת לו שם באותיות גדולות, אבל כמובן כמו שאר הדברים בפייתון זה לא חובה, אבל אנחנו נשמור על זה. אז בואו ניצור פה משתנה חדש, num of ints, וחייבים להתחל אותו, אז נתחל אותו באפס.

  5. 01:28

    ובעצם מה שאני רוצה לעשות, המטרה שלי במשתנה הזה היא לספור כמה פרסונים יצרתי, אז אני אוסיף בתוך ה-init שלי person.num of ints פלוס שווה 1. בואו עכשיו נעשה איזושהי דוגמה, פור אין ריינג' עשר פי שווה פרסון בוא נעשה נוסיף אותה בתוך ליסט סתם שלא נאבד אותם פנד פרסון זה לא באמת משנה מה אנחנו נותנים לו המטרה היא רק לראות את

  6. 02:19

    העדכון של ה-num of ints אז l במקום המינוס אחת דה נאם אינס ובוא נריץ ונראה מה קיבלנו מינוס אחד זה סתם לרענן את הזיכרון שלכם זה האובייקט האחרון בליסט כמובן שאני לא חייב לקרוא לו אני יכול לשים פה כל מספר מאפס עד עשר גם אפס יעבוד אותו דבר זה סתם לראות שאתם מעניינים

  7. 03:12

    עדיין והאנדרסקור פה זה פשוט בא לציין שזה משתנה זבל זאת אומר משתנה שהוא לא מעניין אותי אני יכול לשים פה איי אבל כפי שאתם רואים אני לא משתמש באיי פה בשום מקום אז כדי להגיד למשתמש שקורא את הקוד שאני לא משתמש ב-i אני שם פשוט אנדרסקור עכשיו אני בעצם יצרתי עשרה כאלה ולכן נאם אוף

  8. 03:38

    אינס הוא עשר שימו לב שגם אם אני אדפיס פה פרסון נקודה נאם אוף אינס גם יקבל עשר עד כאן לכאורה הכל פשוט וקל וגם נראה דומה לשפות אחרות מכאן הנושאים קצת מתחילים להסתבך מה שקורה כשאני קורא נאם אוף אינס אז תלוי מאיפה אני קורא לו מה הכוונה בייצוג של הזיכרון של כל אינסטנס בפייתון לא מופיע נאם אוף אינס נאם אוף אינס מופיע

  9. 04:24

    באובייקט פרסון וכל אינסטנס של פרסון כלומר במקרה הזה כל מי שמופיע בליסט ואם נסתכל על הליסט אז היא בעצם מכילה בטוחה מלא פרסונים פרסון פרסון כולי וכולי וכולי אז כל אחד מהפרסונים האלה מצביע על הקלאס פרסון, כל אחד מהאינסטנסים פרסון מצביע על הקלאס פרסון.

  10. 04:56

    כשאני קורא מתוך האינסטנסים, כשאני קורא ל-num of ins, אז פייתון עושה חיפוש, היא מחפשת קודם כל בתוך הפרסון עצמו, האם יש לי num of ins?

  11. 05:09

    אם כן, היא מדפיסה אותו. אם לא, היא מחפשת אותו בפרסון, ואז היא שואלת, האם לפרסון יש לך איזשהו משהו סטטי שנקרא num of ins?

  12. 05:21

    אם כן, היא מדפיסה אותו. אם לא, אקספצ'ן. אז מה, מה אני מרוויח מזה? בוא נגיד שאני רוצה שאחד מהאנשים, אני לא רוצה שהוא ידע כמה אנשים יש.

  13. 05:41

    אז אני רוצה שהוא יחשוב שהוא לבד בעולם, אז כל מה שצריך לעשות זה לעשות num of ins שווה שווה, אחד ו-print one person, אז מה קיבלנו פה? דבר ראשון, קיבלנו את ההדפסה של num of ins שאנחנו ניגשים אליו מאחד הפרסונים, לא משנה איזה מהם.

  14. 06:37

    מכל אחד מהם בשלב הזה של התוכנית, מכל אחד מהם שניגש ל-num of ins, אני אקבל את המספר 10. בשורה, בהדפסה השנייה, אני ניגש שוב פעם ל-num of ins, אבל הפעם אני ניגש אליו דרך השם של הקלאס.

  15. 06:53

    בגלל שזה הוא קלאס, בגלל שזה משתנה סטטי והוא מוגדר באידנטציה הזאת איפה שמוגדרות הפונקציות ולא באידנטציה הפנימית והוא לא מופיע גם תחת סלף אז הוא נשאר לגשת אליו מבחוץ וגם פה אתם רואים שהפרסון שווה 10. בהדפסה השלישית אני מדפיס את num of ins מתוך מה שנמצא ב-L1 אבל פה אני שמתי באינסטנס מספר 1 של num of ins שמתי שם 1

  16. 07:28

    מה שקרה בפועל זה שאני הוספתי לדיקשנרי של האינסטנס של הפרסון באינדקס אחד הוספתי לו שדה שנקרא num of ints והוא בעצם עשה שדואוינג או בעצם סוג של זה לא overloaded זה לא פונקציה אבל הוא היידינג הוא מסתיר את השדה שמופיע בקלאס ולכן כשאני מדפיס אותו אז פייתון מחפשת את num of ints באינסטנס l1 היא מוצאת אותו שם כי

  17. 08:01

    כי הכנסתי אותו כאן, ולכן היא לא תגיע לשדה שנמצא בפרסון. הדבר הזה הוא בעצם מאוד חזק, הוא מאפשר לנו לשמור מידע משותף להרבה אינסטנסים, ולשנות אותו רק במספר מצומצם מהם, ופייתון אוטומטית תעשה לנו אופטימיזציה ולא תשמור לנו אובייקט של הזיכרון המשותף עבור כל אחד מהם.

  18. 08:25

    למשל, במקרה הזה, num of ins הוא זהה עבור כל המספרים חוץ מאחד. אם נסתכל בזיכרון של פייתון נראה שנאם אוף אינס הוא נשמר בצורה ייחודית רק עבור l במקום האחד אבל בשאר המקומות נאם אוף אינס לא מופיע אלא אוטומטית פייתון תחפש אותו בפרסון אם היא לא תמצא אותו באינס

  19. 08:50

    וככה אנחנו חוסכים מקום בזיכרון. שימו לב שאם אני אדפיס את l1 לפני השינוי אז אני אקבל 10 כי הוא יחפש אותו בפרסון l1 before. שימו לב ש-L1 before הוא 10 ו-L1 after אחרי שעשיתי השמה הוא נהיה 1.

  20. 09:23

    זהו בעצם סדר החיפוש של פייתון שאנחנו מנסים לגשת לאובייקט בזיכרון של אינסטנט. פייתון גם תומכת בסטטיק מתוד וגם בקלאס מתוד ואנחנו נסביר על שניהם.

  21. 09:37

    לפני שאני אסביר אני רק רוצה לציין שאין באמת היגיון כל כך בלעשות סטטיק מתוד בפייתון. קודם כל נסביר מה זה Static Method אבל. Static Method זאת פונקציה שהיא נמצאת תחת ה-Person, אבל היא לא משתמשת באף אחד מהערכים של Person.

  22. 10:01

    למשל, במקרה של Person, בואו נגדיר פונקציה סטטית. אז השם של הפונקציה, אני קורא לו סטאט, אבל זה לא באמת

לקורס המלא: קורס פייתון אונליין למתחילים

ההרצאה הקודמת: פייטון Object Oriented - חלק 1

ההרצאה הבאה: פייטון Object Oriented - חלק 3

הרצאות קשורות מקורסים אחרים

  • Object Serialization
  • Session object - חלק 1
  • המחלקה Object
  • Powershell object

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס PHP - פרויקט מעשי