איך משתמשים במתודה eq כאשר אני רוצה שייתן לי אפשרות השוואה של יותר מתכונה אחת?
האם זה נכון לכתוב את כל האפשרויות שאני רוצה שיתאפשר בניהם ההשוואה ובינהם ‘or’?
לדוגמה אם יש לי מחלקה של מוצר ואני רוצה שיתאפשר לעשות השוואה גם לשם המוצר וגם לגודל שלהם. האם נכון לכתוב את המתודה כך:
ואם לא, מה הדרך הנכונה להשוות בין תכונות במופעים שונים?
לייק 1
devorack
אולי התכוונת eq ?
לדעתי “or” מחזיר True אם אחד מהביטויים נכון.
בשביל לקבל True רק במקרה ששניהם נכונים כדאי להשתמש ב “and”
לייק 1
efratush
כן. התבלבלתי.
שני המקרים לא מספיק טובים.
אם אני רוצה שיהיה אפשרות להשתמש באופרטור == בין המופעים אבל שיוכל לבדוק רק תכונה אחת,לדוגמה:
a.name == b.name
וגם לבדוק מקרה אחר,
a.size == b.size
מה עושים?
devorack
זאת אומרת שאת רוצה להגדיר את פעולת הקסם eq כדי לבצע כל פעם משהו אחר?
איך את מתכננת לקרוא לפעולה כך שפייתון תדע איזו תכונה של המופע ברצונך לבדוק את ההשוואה עליו?
efratush
כן, בדיוק.
אני לא בדיוק יודעת איך לעשות, אבל הייתי רוצה שיהיה אפשרות לבצע את הפעולות שבדוגמה למעלה.
השאלה אם אפשר, ואם כן, איך?
devorack
מתודת הקסם הזו נועדה (למיטב הבנתי) להשוות בין מופעים שלדעתך הם שווים.
למשל בדוגמת הקלפים המצוינת שהכינה @orpaz ניתן היה להחליט שהקלפים “שווים” אם המספר שלהם שווה, או הצבע, או נניח אם מדובר במשחק טאקי למשל - אחד מהם.
על פניו, כמו שהבנתי את השאלה שלך, אין משהו אחד תמיד שלפיו את מוכנה להכריז על שני מופעים כשווים.
אני לדעתי במקרה כזה לא הייתי משתמשת בפעולת קסם.
את יכולה להגדיר איזה פעולה שמתחשק לך לבצע את ההשוואה הזו - כך שתוכלי להגדיר פעולה אחרת לכל אחד מהמקרים האלו.
את גם יכולה להגדיר פעולת השוואה בודדת שמקבלת כפרמטר את ה attribute שברצונך להשוות. במקרה הספציפי של eq אני לא יודעת איך ניתן לקרוא לה בצורה שמאפשרת שליחת פרמטר איתה (אבל ייתכן שאני פשוט לא יודעת ויש כזו - לכן שאלתי איך את מתכננת לקרוא לה).
בכל מקרה אם זה כ"כ ספציפי ומשתנה ממקרה למקרה, אולי את יכולה להשתמש פשוט בדוגמאות שנתת ללא פעולה מיוחדת
2 לייקים
orpazf
אפשר למשל להחזיר מתוצאת הפעולה הזו משהו שהוא לא True/False אלא ערך אחר - למשל 1/2/3/4 וכו’ או מחרוזות כלשהן שיעידו על תוצאת ההשוואה ויאפשרו לשחק עם כמה ערכים - אבל זה יצריך השוואה של הערך החוזר מהמתודה לערך אחר כדי לדעת מה היתה התוצאה
2 לייקים
efratush
תודה על התשובות.
אחרי שראיתי את הסרטון(המעולה!) של אורפז, חשבתי שחייבים להשתמש במתודה eq כדי להשוות בין מופעים.
טעיתי.
ושוב תודה על ההסבר
3 לייקים
orpazf
תודה תודה
וכמו שדבורה אמרה - שימוש ב-eq הוא אם את רוצה ש- == יעבוד בצורה מסוימת.
אחרת את יכולה גם ליצור מתודות שמשוות משהו מסוים ולתת להן שם מתאים, למשל compare_name.
2 לייקים
DissonantHarmony
מתמטיקאי אחד נכנס לגלידרייה:
“אני אקח אקח כדור שוקולד…או וניל!
…אבל לא את שניהם!”
-במתודת הקסם, את יכולה להחליט שהיא תחזיר True על מה שבא לך. זה כל הקטע - שאת קובעת! (לפי ההגדרה שלך).
-המשמעות של: “or” במתמטיקה, היא שמספיק שתנאי אחד יתקיים - ויש לנו אור ירוק שזה True. אז הכיוון שלך היה טוב. אני חושב שאם היית משתעשעת בזה במחברת שלך, היית מגלה שזה עובד לך!
*העשרה (לא קשור לשאלה שלך, אלא קשור לנושא של or):
פייתון יודעת להיות “עצלנית”:
למשל, אם יהיה לנו:
condition_1 or condition_2 or condition_3 or condition_4
ועל ההתחלה, condition_1 הוא כבר True -
פייתון אפילו לא תלך לבדוק את שאר התנאים.