רעננו את הדף והקליקו למעבר לנושא הבא:

ירושה

ירושה

ניתן לבנות מחלקה השואבת באופן מלא את כל התכונות של מחלקה אחרת, כלומר, "לרשת" ממנה באמצעות שורת קוד פשוטה, את כל התוכן הרלבנטי לנו.


class Store: def __init__(self, size, adr): self.size = size self.adr = adr self.balance=0 def __str__ (self): return self.adr def add (self,num): self.balance +=num def sub (self,num): self.balance -=num stim=Store(150,"brodetsky 15 Or Yeuda") print(stim.balance) >>> 0 stim.add(500) print(stim.balance) >>> 500 stim.sub(300) print(stim.balance) >>> 200 print(stim) >>> brodetsky 15 Or yeuda

למעלה אנו רואים מחלקה (class) רגילה שנקראת Store היא יודעת לייצר מופעים (instance) כמו זה שיצרנו וקראנו לו stim היא מקבלת שני פרמטרים , גודל החנות וכתובתה. והיא יודעת להוסיף ולחסר סכומים ממאזן החנות שהוגדר על ידנו כ- self.balance.

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


class Store: def __init__(self, size, adr): self.size = size self.adr = adr self.balance=0 def __str__ (self): return self.adr def add (self,num): self.balance +=num def sub (self,num): self.balance -=num class Supermarket(Store): def __init__(self, size, adr,parknum): Store.__init__(self,size,adr) self.parknum=parknum ampm=Supermarket(400,"hashalom 45 ramalla",50) ampm.add (320) ampm.sub(150) print (ampm.parknum) >>> 50 print (ampm.balance) >>> 170 print(ampm) >>> hashalom 45 ramalla

כתבנו את מילת המפתח class ובחרנו שם כמו בכל מחלקה רגילה Supermarket . אבל הפעם הכנסנו לתוך הסוגריים הצמודים לשם המחלקה, גם את שם המחלקה ממנה אנו רוצים לרשת את התכונות, במקרה שלנו Store. בנוסף הכנסנו תחת הפונקציה המיוחדת __init__ שלושה פרמטרים אשר מעניינים אותנו כאשר מדובר בסופרמרקט size, adr ,parknum גודל החנות, הכתובת שלה, ומספר מקומות החניה הצמודים לסופרמרקט (פרמטר שאינו מעניין כאשר מדובר בחנות באופן כללי).

בנוסף, על מנת שנוכל להעביר ל- Supermarket את התכונות של Store אנו צריכים להוסיף את שורת ה- __init__ של המחלקה ממנה יורשים - (Store.__init__(self,size,adr וזהו.

עכשיו ניצור מופע של סופרמרקט בשם ampm, שטחו 400 מ"ר, והוא נמצא ברחוב hashalom ויש לו 50 מקומות חניה צמודים.

והנה הדבר המדהים, אנו יכולים להוסיף ולהחסיר סכומים ממאזן הסופרמרקט, דבר שאינו מופיע בכלל באופן גלוי בקוד המחלקה Supermarket , לבקש לראות את המאזן שלו (balance) ולראות את שם הסופרמרקט – הכל מבלי שהיינו צריכים לקודד שום דבר מהדברים האלה במחלקה החדשה, שירשה את כל התכונות הללו ישירות ממחלקת Store. זה הסיפור חסכון בשורות קוד.

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

Related Posts

See All