תחי ישראל - אין לנו ארץ אחרת

תחי ישראל -אין לנו ארץ אחרת

פייתון מונחה עצמים 1: מחלקות, אובייקטים, תכונות ומתודות

 

מחבר:
בתאריך:

תכנות מונחה עצמים הוא סגנון כתיבה בו מקבצים את כל המשתנים והפונקציות של נושא מסוים בתוך מחלקה (class). סגנון זה נחשב ליעיל יותר מהסגנון הרגיל (הפרוצדורלי) של תכנות כי הוא גורם לקוד מאורגן יותר, הכולל פחות קוד ופחות חזרות. 

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

 

מחלקה class

בתכנות מונחה עצמים מקבצים את הקוד של נושא מסוים לתוך מחלקה class. לדוגמה, מחלקה המוקדשת למשתמשים (class User) או לציוצים (class Twit).

ניצור מחלקה של מכוניות (class Car) שתקבץ את כל המשתנים והפונקציות בנושא תחת אותה מחלקה:

class Car:
  pass
  • כל מילה בשם המחלקה מתחילה באות גדולה. ללא רווחים בין המילים. לדוגמה: OldCar.

 

תכונות, מתודות ואובייקטים

מחלקות מכילות תכונות (attributes) ומתודות (methods):

  • תכונות הם משתנים בתוך מחלקה.
  • מתודות הם פונקציות בתוך מחלקה.

מכל מחלקה ניצור אובייקט אחד או יותר. כל האובייקטים יקבלו את התכונות והמתודות של המחלקה. הערכים של התכונות יכולים להיות שונים בין האובייקטים. לדוגמה, אם המחלקה היא User, האובייקט user1 יקבל את השם admin בעוד האובייקט user2 יקבל את השם mogul.

הפרמטר הראשון שמעבירים למתודות הוא בדרך כלל self. ל-self תפקיד מיוחד כיוון שהוא מכיל את האובייקט שקרא למחלקה.

 

המתודה המיוחדת __init__ ויצירת אובייקטים מהמחלקה

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

נוסיף למחלקה את המתודה __init__() שתדפיס מסר לשורת הפקודות בכל פעם שיוצרים אובייקט מהמחלקה.

class Car:

  def __init__(self):
    print('The object was created')

ניצור מהמחלקה Car אוביקט ששמו car1:

car1 = Car()

התוצאה:

The object was created
  • הקוד בתוך הפונקציה __init__() רץ ראשון אחרי יצירת האובייקט, והדפיס למסך את ההודעה.

בגלל שהמתודה __init__() רצה ראשונה אחרי יצירת אובייקט מקובל להגדיר בתוכה את התכונות של האובייקט. נגדיר שלאובייקט מכונית יהיו התכונות הבאות:

class Car:
    def __init__(self, model, num_wheels, has_sunroof):
        self.model = model
        self.num_wheels = num_wheels
        self.has_sunroof = has_sunroof
  • בתוך הפונקציה __init__() הגדרנו את התכונות של האובייקט: שם מודל, מספר גלגלים, גג נפתח.

ניצור אובייקט חדש מהמחלקה Car ונעביר לו את התכונות:

car1 = Car('Tesla', 4, False)

אחרי שיצרנו את האובייקט, אנחנו יכולים לגשת לתכונות שלו:

print(car1.model)
print(car1.num_wheels)
print(car1.has_sunroof)

התוצאה:

Tesla
4 
False

אנחנו יכולים גם להגדיר את התכונות של אובייקט קיים. נוסיף לרכב גג נפתח:

car1.has_sunroof = True

אנחנו יכולים ליצור יותר מאשר אובייקט אחד מאותה המחלקה:

car1 = Car('Tesla', 4, False)
car2 = Car('BMW', 4, False)
car3 = Car('Mercedes', 4,True)

ולגשת לתכונות של כל אובייקט בנפרד:

print(car1.model)
print(car2.model)
print(car3.model)

התוצאה:

Tesla
BMW
Mercedes

 

הוספת מתודות למחלקה

עד כה ראינו את המתודה המיוחדת __init__() שרצה מיד עם יצירת האובייקט. ניתן להוסיף למחלקה כמה מתודות שצריך. נוסיף למחלקה את המתודה say_hello():

class Car:
  def __init__(self, model, num_wheels, has_sunroof):
    self.model = model
    self.num_wheels = num_wheels
    self.has_sunroof = has_sunroof

  def say_hello(self):
    hav = "have" if self.has_sunroof else "don't have"
    msg = "Hello, I'm {} and I {} a sunroof" . format(self.model, hav)
    return msg
  • נהוג לכתוב את שמות המתודות כשכל האותיות קטנות ובין המילים מפריד קו תחתון. לדוגמה: say_hello
  • הפרמטר הראשון במתודה הוא האובייקט שאותו נציין באמצעות self. לא לשכוח לציין את הפרמטר הזה כי גם אם לא מעבירים אותו באמצעות הקריאה למתודה הוא עובר באופן אוטומטי עם פייתון ומאפשר שימוש בתכונות של האובייקט.
  • נשתמש ב-self כדי לקרוא לתכונה של האובייקט. לדוגמה: self.model.

ניצור שני אובייקטים ונקרא למתודה:

car1 = Car('Tesla', 4, True)
print(car1.say_hello())

car2 = Car('BMW', 4, False)
print(car2.say_hello())

התוצאה:

Hello, I'm Tesla and I have a sunroof
Hello, I'm BMW and I don't have a sunroof

לכל המדריכים בסדרה ללימוד פייתון

 

 

אהבתם? לא אהבתם? דרגו!

0 הצבעות, ממוצע 0 מתוך 5 כוכבים

 

 

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

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

שימו לב! הסקריפטים במדריכים מיועדים למטרות לימוד בלבד. כשאתם עובדים על הפרויקטים שלכם אתם צריכים להשתמש בספריות וסביבות פיתוח מוכחות, מהירות ובטוחות.

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

השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.

הוסף תגובה חדשה

 

 

ענה על השאלה הפשוטה הבאה כתנאי להוספת תגובה:

דג למים הוא כמו ציפור ל...?

 

תמונת המגיב

שגיא בתאריך: 31.03.2021

הכל כתוב בצורה ברורה ומובנת, קל יותר להבין עם המדריך הזה, תודה רבה!

תמונת המגיב

רותי בתאריך: 30.08.2021

כתוב מצויין תודה

תמונת המגיב

תמר בתאריך: 29.10.2021

היי יוסי האם אתה עושה שעורים פרטיים בתכנות מונחה עצמים ?

תמונת המגיב

יוסי בן הרוש בתאריך: 29.10.2021

הי תמר, לא מלמד פרטי.

תמונת המגיב

עדי בתאריך: 18.01.2022

החומר כתוב בצורה מעולה!, אני נעזרת המון תודה רבה, אין עליך!!!

תמונת המגיב

מנדי ש בתאריך: 18.08.2022

תודה רבה

תמונת המגיב

פייגי הרטמן בתאריך: 03.10.2022

תודה רבה! מנס לרענן זיכרון וללמוד עוד דברים בפייתון, האתר שלך ממש עוזר, הכל ברור עם דוגמאות מצויינות, לא נשאר שאלות לגבי החומר המוסבר לאחר שעובדים עם ההסברים שלך.

תמונת המגיב

גיא בתאריך: 28.11.2022

תותח!

תמונת המגיב

עדן בתאריך: 10.12.2022

מוסבר מצוין. תודה רבה.

תמונת המגיב

אלון בתאריך: 29.05.2023

הסבר מצויין ופשוט. ממש תודה!