אני רוצה לבנות מחלקה אבסטרקטית, ולחייב את כל המחלקות היורשות שיתקיים בהם אובייקט כלשהו (ולא מתודה). האם זה אפשרי? אני מתקשה להבין את התיעוד של המודול.
ספציפית בתרגיל מלון קליפורניה
רציתי להגדיר במחלקה “חדר” ממנה יורשים שאר סוגי החדרים, את האובייקט MAX_BEDS, שיידרס ויוגדר אחרת לכל מחלקת בת.
devorack
מה זה אומר, להגדיר אובייקט?
למיטב הבנתי אובייקט הוא אוסף של תכונות ופעולות, ולכן אם כל החדרים חולקים תכונות / פעולות מסוימות אלו יופיעו במחלקת העל ומה שייחודי יופיע רק במחלקות היורשות שהחדר הוא האובייקט שלהן.
אבל אולי לא הבנתי נכון, או שלא הבנתי את השאלה.
rogruman
נראה לי שלא ניסחתי נכון.
אולי אני לא מדייקת כשאני אומרת אובייקט - הכוונה היא כנראה לתכונה, כמו תכונה גלובאלית שמוגדרת למחלקה (ולא בפעולת init).
devorack
נראה לי שאפשר להגדיר משתנה מחלקה (שאם הבנתי עכשיו נכון אז זה מה שאת רוצה), למרות שאם את מתכננת לדרוס אותו, אז אולי כדאי לחשוב על מה המקום הכי מתאים להגדרה הזו.
מה שכן, תו’כ ההתכתבות הזו נפל לי האסימון על משהו אחר שניסיתי לעשות וקצת רבתי איתו, אז תודה!
לייק 1
rogruman
זו בדיוק התהייה שלי.
כמו שבמחלקה אבסטרקטית אני יכולה להגדיר מתודות שחייבות להתקיים במחלקות היורשות, אני רוצה להגדיר משתנה מחלקה שחייב להתקיים במחלקות היורשות, ולא יודעת מה הסינטקס של זה.
devorack
ניסיתי קצת להסתכל אונליין ולא מצאתי תשובה סופר ישירה - אולי מישהו אחר יוכל לספק כזו.
מה שכן מצאתי זה הצעות להגדיר תכונה כזו ומשם את כבר יודעת לחייב אותה נראה לי.
לייק 1
zurikarat
אם הבנתי נכון (תקני אותי) את רוצה להגדיר משתנה מחלקה והוא יופיע במחלקה היורשת?
אם כן;
class A:
a = 5
class B(A):
pass
print(B().a)
משתני מחלקה תמיד יועברו למחלקה היורשת, כמו שאת רואה.
efratush
ים ענה על זה בטלגרם:
יש דרכים לעשות את זה, אבל לצערי לא משהו שב־scope של החומר שלנו
(אין דרך straight-forward של שורה, צריך לתכנת משהו שישנה את ההתנהגות של מחלקות)