שאלת הבנה - הדפסה

יצרתי רשימה של נקודות.
אם אני מדפיסה כל נקודה ברשימה, בשימוש בלולאת for - מודפסת לי כל נקודה על פי הפונקציה str.
לעומת זאת אם אני עושה הדפסה של הרשימה - אני מקבלת הדפסה של רשימה עם הרבה הפניות לטיפוסים מסוג Point.
למה זה ככה? יש דרך לשנות את זה?

ענית לעצמך - הדפסה של כל נקודה נעשית ע’י שימוש בstr שהגדרת - בהדפסת הרשימה מתקבלת רשימת האובייקטים שמיוחסים לכל מיקום ברשימה, כך שפעולות שניתן לעשות על / עם האובייקטים האלו יוכלו להיעשות (שהמחרוזת לבד לא מאפשרת). זה דומה (אני חושבת) למקרים כמו של גנרטור שראינו כבר

לייק 1

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

יש דרך “לתקן” את זה בעזרת פעולת הקסם __repr__ שטרם למדנו :slight_smile:

2 לייקים

בהתחלה קראנו לכל משתמש בשם אחר: user1, user2 וכך הלאה.
במקרה של ה-for לכולם קראנו באותו שם? new_user? הייתכן? (כמובן שכל פעם הזנו נתונים אחרים, אבל לא זו השאלה)

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

ברור לי שהמשתנים נדרסים כל פעם ולא זו השאלה.
אנסה לחדד: האם יש משמעות לשם כאשר אני מגדירה מופע חדש?

השם הוא רק המצביע וזה שמאפשר לך גישה למשתנה עצמו, ששמור במקום אחר. אפשר להגדיר a = Point() ולאחר מכן p = a והם יצביעו לאותו אובייקט, ואז תוכלי להיפטר מ-a למשל ע"י דריסה והשמה של ערך אחר בתוכו. החשיבות בשם היא כדי שתהיה לך גישה לאובייקט עצמו

לייק 1