פייתון מונחה עצמים 2: משתנה אובייקט ומשתנה מחלקה
בפייתון מונחה עצמים ישנם שני סוגי משתנים: משתני אובייקט (instance variables) ומשתני מחלקה (class variables). במדריך זה נסביר ונדגים את שניהם.
משתנה אובייקט
במדריך הראשון בסדרת פייתוו מונחה עצמים ראינו דוגמה למשתנה התלוי באובייקט. התלות נוצרה באמצעות המשתנה self אותו נעביר כפרמטר הראשון למתודות, והסיבה שהוא עובד היא כי self מייצג את האובייקט.
בדוגמה הבאה, האובייקטים שניצור מהמחלקה Car נבדלים בתכונה model המוגדרת בנפרד עבור כל אובייקט בעת יצירתו:
class Car:
def __init__(self, model):
self.model = model
def say_hello(self):
return "Hello, I'm a {}" . format(self.model)
בהתאם, מתודה המשתמשת בתכונה model תספק תוצאה שונה עבור כל אחד מהאובייקטים:
car1 = Car('Tesla')
print(car1.say_hello())
car2 = Car('BMW')
print(car2.say_hello())
התוצאה:
Hello, I'm a Tesla Hello, I'm a BMW
משתנה מחלקה
בעוד משתני אובייקטים יכולים להיות שונים בין האובייקטים. לדוגמה, שם המודל או גילו של אדם. משתני מחלקה יהיו זהים עבור כל האובייקטים כי ערכם מוכתב על ידי המחלקה.
בקלאס Car מספר הגלגלים (num_wheels) אינו תלוי בדגם אז כדאי להגדירו כמשתנה מחלקה.
את משתני המחלקה נגדיר בתוך הקלאס ומחוץ לכל מתודה.
נוסיף לקלאס את משתנה המחלקה num_wheels (מספר גלגלים):
class Car:
num_wheels = 4
def __init__(self, model):
self.model = model
def say_hello(self):
return "Hello, I'm a {}" . format(self.model)
כיוון שהמשתנה שייך למחלקה אנחנו יכולים לגשת אליו ישירות מהמחלקה:
print(Car.num_wheels)
4
כיוון שיש לנו גישה למשתנה אנחנו יכולים לקבוע את ערכו:
Car.num_wheels = 3
print(Car.num_wheels)
3
כפי שניתן לגשת למשתנה מחוץ למחלקה ניתן לגשת אליו גם בתוך המחלקה.
נשנה את קוד המתודה say_hello() כדי שתשתמש במשתנה num_wheels:
class Car:
num_wheels = 4
def __init__(self, model):
self.model = model
def say_hello(self):
return "Hello, I'm a {} and I have {} wheels" . format(self.model, Car.num_wheels)
בתוך המתודה say_hello():
- ניגש למשתנה model בתיווך self מפני שהוא משתנה התלוי באובייקט.
- ניגש למשתנה num_wheels השייך למחלקה ישירות מתוך המחלקה בגלל שהוא משתנה התלוי במחלקה.
ניצור אובייקט ונקרא למתודה:
car1 = Car('Tesla')
print(car1.say_hello())
Hello, I'm a Tesla and I have 4 wheels
משתנה מחלקה בתור מונה
כפי שראינו, משתנה מחלקה שייך למחלקה ומשותף לכל האובייקטים אותם ניצור מהמחלקה. נשתמש בתכונותיו ליצירת מונה.
נוסיף לקלאס את משתנה המחלקה cars_counter שיהווה מונה המתעדכן על פי מספר האובייקטים שיצרנו מהמחלקה.
בתוך המתודה __init__ נוסיף אחד למונה בכל פעם שיוצרים אובייקט מהמחלקה.
class Car:
cars_counter = 0
def __init__(self, model):
self.model = model
Car.cars_counter += 1
ניצור שלושה אובייקטים מהמחלקה ונראה איך זה משפיע על המספר אותו מציג המונה:
print(f"The number of cars is: {Car.cars_counter}")
car1 = Car('Tesla')
car2 = Car('BMW')
car3 = Car('Mercedes')
print(f"The number of cars is: {Car.cars_counter}")
והתוצאה:
The number of cars is: 0 The number of cars is: 3
המונה עובד. התחלנו מאפס מכוניות וסיימנו עם 3.
לסיכום
משתני מחלקה משותפים לכל האובייקטים אותם יוצרים מהמחלקה ומאפשרים לחלוק מידע בין האובייקטים ללא צורך במשתנה גלובלי.
לכל המדריכים בסדרה ללימוד פייתון
אהבתם? לא אהבתם? דרגו!
0 הצבעות, ממוצע 0 מתוך 5 כוכבים
המדריכים באתר עוסקים בנושאי תכנות ופיתוח אישי. הקוד שמוצג משמש להדגמה ולצרכי לימוד. התוכן והקוד המוצגים באתר נבדקו בקפידה ונמצאו תקינים. אבל ייתכן ששימוש במערכות שונות, דוגמת דפדפן או מערכת הפעלה שונה ולאור השינויים הטכנולוגיים התכופים בעולם שבו אנו חיים יגרום לתוצאות שונות מהמצופה. בכל מקרה, אין בעל האתר נושא באחריות לכל שיבוש או שימוש לא אחראי בתכנים הלימודיים באתר.
למרות האמור לעיל, ומתוך רצון טוב, אם נתקלת בקשיים ביישום הקוד באתר מפאת מה שנראה לך כשגיאה או כחוסר עקביות נא להשאיר תגובה עם פירוט הבעיה באזור התגובות בתחתית המדריכים. זה יכול לעזור למשתמשים אחרים שנתקלו באותה בעיה ואם אני רואה שהבעיה עקרונית אני עשוי לערוך התאמה במדריך או להסיר אותו כדי להימנע מהטעיית הציבור.
שימו לב! הסקריפטים במדריכים מיועדים למטרות לימוד בלבד. כשאתם עובדים על הפרויקטים שלכם אתם צריכים להשתמש בספריות וסביבות פיתוח מוכחות, מהירות ובטוחות.
המשתמש באתר צריך להיות מודע לכך שאם וכאשר הוא מפתח קוד בשביל פרויקט הוא חייב לשים לב ולהשתמש בסביבת הפיתוח המתאימה ביותר, הבטוחה ביותר, היעילה ביותר וכמובן שהוא צריך לבדוק את הקוד בהיבטים של יעילות ואבטחה. מי אמר שלהיות מפתח זו עבודה קלה ?
השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.