בפונקציה _generate_back_row בתרגיל השחמט, יוצרים dict params שעל פי הבנתי משתמשים בו בכדי ליצור instances של Rook / Knight / etc. ע"י dict unpacking - בשורה האחרונה בפונקציה [ order[i](col=i, **params) ].
מה שאני קצת לא מבין - הunpacking של המילון, היה עובד גם במידה ובמקום ‘color’ היה רשום ‘moshe’? כלומר - הדבר היחיד שמשנה בdict unpacking במקרה הזה - זה הסדר? (שצריך להתאים לסדר בו מוגדרים הפרמטרים בPiece?)
אם יש איזה חומר רקע מהשיעורים שפספסתי בנושא, אשמח אם תפנו אותי אליו (פשוט לא זוכר שראיתי dict unpacking מהסוג הזה בכדי ליצור class instance).
Yam
יצירת class instance היא בדיוק כמו קריאה רגילה לפונקציה (במובן של – זה פשוט קורא ל־__init__). אין חשיבות לסדר האיברים ב־dict unpacking (חשוב לזכור ש־dict unpacking קיימת המון שנים בפייתון, וסדר למילון נוסף לתקן רק בגרסה 3.7). מכאן שיש חשיבות לשמות.
assi
תודה על התשובה ים!
אם כך מה שלא ברור לי - כאשר עושים dict unpacking ל params, הkeys הם strings (לדוגמא ’ color ')
לעומת זאת, כאשר הם “מגיעים” ליצירת Pawn class instance, שם מחכים vars (לדוגמא color).
פייתון עושה אוטומטית את ההמרה מstring היישר לvar המתאים?
אם אני מבלבל פה מושגים אז תגיד
תודה!
Yam
הוא לא בדיוק עושה המרה, אלא פשוט ככה המכניזם של dict unpacking עובד
assi
תודה. עכשיו מצאתי את זה במחברת 4 בנושא unpacking וסגר לי סופית את הפינה.
“במקרה המיוחד מאוד של מילון, אפשר לשלוח לפונקציה את הפרמטרים בעזרת unpacking עם שתי כוכביות.
המפתחות של המילון צריכים לציין את שם הפרמטרים של הפונקציה, והערכים במילון יהיו הערך שיועבר לאותם פרמטרים”