שאלה - תרגיל לדוגמא מחברת 1 (מחלקות)

בתרגיל לדוגמא, תחת המתודה info_message(self) כל ההתיחסות היא למשתנה path.
בשום מקום לא הגדרנו את המשתנה הזה בפונקציה, והפונקציה מקבלת רק את self. אז איך הפונקציה הזו מצליחה לרוץ?

האם הפונקציה יודעת להתייחסת למתשנה path שהוכנס בתוך פונקציית היצירה init?

לייק 1

איזה כיף שיש אנשים כמוך שישאלו את השאלות הנכונות. :slight_smile:
זו טעות במחברת, תודה שמצאת, הכוונה היא כמובן ל־self.

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

לייק 1

אני גם תהיתי לגבי זה. דיברנו על זה כאן -
גבולות גזרה של מחלקה :slight_smile:

def get_extension(self):
        full_name = self.get_basename()
        filename, _, extension = full_name.rpartition(".")
        return extension

במתודה למעלה (גם היא מאותו תרגיל) לא נעשה שימוש במשתנה filename (בדיוק כמו במשתנה _ שאחריו)
לא עדיף ליצור רק משתנה אחד בשם extension כמו בדרך הבאה (או בכל דרך אחרת)?

extension = full_name.rpartition(".")[-1]

תיקון קטן,

אם כבר מיקום המינוס 1, כי רוצים את הסיומת

ואקשה יותר, rparitition הוא כמו split בפועל רק שהוא גם מחזיר את החלק שלפיו פיצלנו. אם ממילא לא משנה לנו החלק שפיצלנו (הנקודה עצמה) אז למה לא בכלל להשתמש ב-split? ואז באמת לקחת את המיקום האחרון?

אלא אם הכוונה הייתה על הדרך להציג לנו את הbuilt-in הזה שלא יצא לנו עד כה?

מי אמר שאין בנתיב כמה נקודות?

גם אם יש, split יפצל לפי כולם ואז אם ניקח את האחרון נקבל מה שרצינו
ולגבי rparitition הוא יפצל לפי האחרון, ואותנו מעניין האחרון אז שוב אפשר לקחת את המינוס 1 :man_shrugging:

צודק לגמרי, כתבתי מהר ולא שמתי לב. (תיקנתי לעתיד).
split אכן גם יעבוד, לכן ציינתי שיש גם דרכים אחרות.
בכל מקרה השאלה עומדת, נוצר פה משתנה שאין פה שום שימוש.

ומה יקרה אם אין נקודה בקובץ? אתה תחזיר את שם הקובץ במקום את הסיומת.
היתרון ב־partition (או ב־rpartition) זה שהם מחזירים בוודאות 3 רכיבים (והם במידה מסוימת מהירים יותר מ־split, כי ברגע שמצאו מופע אחד הם יכולים להפסיק לסרוק את המחרוזת).

זה לא נורא ליצור משתנה שאין לו שימוש אם הוא מעביר טוב יותר מה השורה עושה, וזה המקרה בחומר של החוברת הזו :slight_smile:

לייק 1