תודה על התשובה
Anonymous : |
1. בגדול, יש Exception "אב" - SmartHomeException, שכל שאר ה Exceptions בקוד שלי יורשים ממנו. יותר קל לי להסביר עם דוגמא:
אם תריץ את הקוד הנ"ל, אתה תראה ש ב try...except block ה exception הכי ספציפי נתפס. ככה, אם אתה רוצה לתפוס exception ספציפי בקוד אתה תתפוס את MySubException. אם כל exception שנזרק מהקוד שלי מעניין אותך, אתה תתפוס את MyException. כל השאר הם תחת Exception.
לגבי למה לא השתמשתי ב Exceptions הקיימים הסיבה היא פשוטה: אין יותר מדי כאלה. אם יש אחד שמתאים לצרכים שלי - פספסתי אותו. אשמח אם תציין זאת בפניי.
שים לב שמשהו נוסף שאני עושה בו שימוש הוא constructor שונה ל class של ה Exception בחלק מ ה Exceptions. במקום להעביר את ה error כ string ל constructor, אני מעביר פרמטרים ובונה את ההודעה בתוך המחלקה שיורשת מ Exception.
|
ראיתי את הירושה, אבל הנה מספר exceptions שהיית יכול להשתמש בהם:
במקום InvalidSubclassException היית יכול להשתמש ב TypeError
במקום MethodMissingException היית יכול להשתמש ב NameError שהיה קופץ בכל מקרה.
כמו כן, יש לך את NotImplementedError בדיוק עבור מחלקות/מתודות שהן abstract.
פשוט היום התעסקתי הרבה ב
תעוד של הנושא, בגלל זה, זה קפץ לי לעין.
אני פשוט עצלן כמתכנת, ומעדיף לא לממש דברים שכבר מישהו עשה אותם, ואם הם כבר ב stdlib אז בכלל, מה טוב
ציטוט: |
2. לא הבנתי. האם התכוונת ל import * from module ?
אם אתה מתכוון שהשימוש הנכון הוא import A,B,C from module - אתה צודק. אולי אשנה את זה בהמשך.
אם התכוונת שאני אשתמש ב import module ואז module.A אז עד כמה שידוע לי, זה לא מקובל. אני לא ראיתי הרבה קוד שמשתמש ב full class names. זה פשוט לא נוח...
|
אני מתכוון כי עד כמה שאני הבנתי לפחות, נהוג בד"כ לעשות
ורק כאשר יש צורך אמיתי "לחלל" את ה namespace.
בערך כמו ברעיון של ג'אווה. גם ה zen of python מדבר על זה בשורה של:
ציטוט: |
Explicit is better than implicit.
|
כלומר לנסות להבין טוב יותר מאיפה כל דבר מגיע, וגם ככה לא לדרוס קריאות בטעות.
כמובן שזה לפי הבנתי בלבד.
פעם ראשונה שראיתי קוד פיתון אשר משתמש בהם, ולא ידעתי שהם קיימות, או אם זה מקובל בכלל. נחמד לראות גישה של ternary שונה
תודה לך על התשובות