שיעורי פיתון וחפצים - תכנות מונחה עצמים



בלוג זה ב'כיתת פייתון 'עוסק ביסודות המעמד, התכונה ומושגי OOPS שונים כגון ירושה, פולימורפיזם ותמצית.

לאחר ש- Stack Overflow ניבא שעד שנת 2019, Python יעלה על שפות אחרות מבחינת מפתחים פעילים, הדרישה לכך רק צומח.פייתון עוקב אחר פרדיגמת התכנות מונחה האובייקטים. הוא עוסק בהכרזה על שיעורי פיתון, יצירת אובייקטים מהם ואינטראקציה עם המשתמשים. בשפה מונחית עצמים, התוכנית מחולקת לאובייקטים עצמאיים או שאתה יכול לומר למספר מיני תוכניות. כל אובייקט מייצג חלק אחר ביישום שיכול לתקשר ביניהם.
בבלוג זה של פייתון, תבין כל היבט של שיעורים ואובייקטים ברצף הבא:

בוא נתחיל. :-)





מהי מחלקת פיתון?

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

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



  • משתנה כיתתי הוא משתנה המשותף לכל האובייקטים / מופעים השונים של המחלקה.
  • משתני מופע הם משתנים ייחודיים לכל מופע. זה מוגדר בתוך שיטה ושייך רק למופע הנוכחי של מחלקה.
  • שיטות נקראים גם פונקציות המוגדרות בכיתה ומתארת ​​את התנהגות האובייקט.

עכשיו, הבה נתקדם ונראה איך זה עובד ב- PyCharm. כדי להתחיל, ראשית התבונן בתחביר של מחלקת פיתון.

תחביר :

ההבדל בין hashap ל- hashtable
class Class_name: statement-1. . הצהרה-נ

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



עובד בכיתה: לעבור # אין תכונות ושיטות emp_1 = עובד () emp_2 = עובד () ניתן ליצור באופן ידני משתנה # instance emp_1.first = 'aayushi' emp_1.last = 'Johari' emp_1.email='aayushi@edureka.co 'emp_1.pay = 10000 emp_2.first =' test 'emp_2.last =' abc 'emp_2.email='test@company.com' emp_2.pay = 10000 הדפס (emp_1.email) הדפס (emp_2.email)

תְפוּקָה -

aayushi@edureka.co test@company.com

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

שיטות ותכונות בכיתת פיתון

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

עובד בכיתה: def __init __ (self, first, last, sal): self.fname = self first.lname = last self.sal = sal self.email = first + '.' + האחרון + '@ company.com' emp_1 = עובד ('aayushi', 'johari', 350000) emp_2 = עובד ('test', 'test', 100000) הדפס (emp_1.email) הדפס (emp_2.email)

כעת בשיטת 'init', הגדרנו משתני מופע אלה (עצמי, ראשון, אחרון, סאל). העצמי הוא המקרה שמשמעותו בכל פעם שאנחנו כותבים self.fname = ראשון, זה כמו emp_1.first = 'aayushi'. לאחר מכן יצרנו מקרים של מחלקת עובדים בהם נוכל להעביר את הערכים שצוינו בשיטת init. שיטה זו לוקחת את המקרים כטיעונים. במקום לעשות זאת ידנית, זה ייעשה באופן אוטומטי עַכשָׁיו.

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

עובד בכיתה: def __init __ (self, first, last, sal): self.fname = self first.lname = last self.sal = sal self.email = first + '.' + last + '@ company.com' def fullname (self): להחזיר '{} {}'. פורמט (self.fname, self.lname) emp_1 = עובד ('aayushi', 'johari', 350000) emp_2 = עובד ('test', 'test', 100000) הדפס (emp_1.email) הדפס (emp_2.email) הדפס (emp_1.fullname ()) הדפס (emp_2.fullname ())

תְפוּקָה-

aayushi.johari@company.com test.test@company.com aayushijohari testtest

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

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

עובד בכיתה: perc_raise = 1.05 def __init __ (self, first, last, sal): self.fname = self first.lname = self last.sal = sal self.email = first + '.' + last + '@ company.com' def fullname (self): return '{} {}'. format (self.fname, self.lname) def apply_raise (self): self.sal = int (self.sal * 1.05 ) emp_1 = עובד ('aayushi', 'johari', 350000) emp_2 = עובד ('test', 'test', 100000) הדפס (emp_1.sal) emp_1.apply_raise () הדפס (emp_1.sal)

תְפוּקָה-

350000 367500

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

תכונות בשיעור פייתון

תכונות בפייתון מגדירות מאפיין של אובייקט, אלמנט או קובץ. ישנם שני סוגים של מאפיינים:

  • תכונות כיתה מובנות: קיימות תכונות מובנות שונות בשיעורי פיתון. למשל _dict_, _doc_, _name _, וכו 'תן לי לקחת את אותה דוגמה שבה אני רוצה להציג את כל זוגות ערכי המפתח של עובד 1. לשם כך, אתה יכול פשוט לכתוב את ההצהרה שלהלן המכילה את מרחב השמות של הכיתה:

    הדפס (emp_1 .__ dict__)

    לאחר ביצועו, תקבל פלט כגון: {'fname': 'aayushi', 'lname': 'johari', 'sal': 350000, 'email': 'aayushi.johari@company.com'}

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

הבא, יש לנו ציבורי, מוגן ו פְּרָטִי תכונות. בואו נבין אותם בפירוט:

שִׁיוּם סוּג מַשְׁמָעוּת
שֵׁםפּוּמְבֵּיניתן להשתמש בתכונות אלה באופן חופשי בתוך הגדרת כיתה או מחוצה לה
_שֵׁםמוּגָןאין להשתמש בתכונות מוגנות מחוץ להגדרת הכיתה, אלא אם כן בתוך הגדרת תת-מחלקה
__שֵׁםפְּרָטִיתכונה מסוג זה אינה נגישה ובלתי נראית. לא ניתן לקרוא ולא לכתוב מאפיינים אלה, למעט בתוך הגדרת הכיתה עצמה


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

מהם חפצים בכיתת פיתון?

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

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

מחלקה MyClass: def func (עצמי): הדפס ('שלום') # צור MyClass חדש ob = MyClass () ob.func ()

להתקדם בשיעור פיתון, בואו להבין את המושגים השונים של OOP.

מושגי OOPs

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

מה הוא סקיפי בפיתון

כיתת פיתון: ירושה

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

כפי שאנו רואים בתמונה, ילד יורש את הנכסים מהאב. באופן דומה, בפיתון ישנם שני שיעורים:

1. כיתת הורים (כיתת סופר או בסיס)

2. כיתת ילדים (כיתת משנה או כיתת נגזרות)

מחלקה אשר יורשת את המאפיינים מכונה יֶלֶד מחלקה ואילו מחלקה שתכונותיה עוברות בתורשה מכונה הוֹרֶה מעמד.

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

מיזוג קוד מקור מיון c ++

בואו נמשיך בשיעור פיתון ונבין כיצד תורשה מועילה.

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

עובד בכיתה: מספר_עובד = 0 העלאה_סכום = 1.04 def __init __ (עצמי, ראשון, אחרון, sal): self.first = עצמי ראשון. last = last self.sal = sal self.email = ראשון + '.' + אחרון + '@ company.com' עובד. מספר_עובד + = שם מלא מלא 1 (עצמי): להחזיר '{} {}'. פורמט (עצמי.ראשון, עצמי.פחות) def להחיל_עלייה (עצמי): self.sal = int ( self.sal * raise_amount) מפתח מחלקה (עובד): לעבור emp_1 = מפתח ('aayushi', 'johari', 1000000) הדפס (emp_1.email)
 תְפוּקָה - aayushi.johari@company.com

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

עובד בכיתה: מספר_עובד = 0 העלאה_סכום = 1.04 def __init __ (עצמי, ראשון, אחרון, sal): self.first = עצמי ראשון. last = last self.sal = sal self.email = ראשון + '.' + אחרון + '@ company.com' עובד. מספר_עובד + = שם מלא מלא 1 (עצמי): להחזיר '{} {}'. פורמט (עצמי.ראשון, עצמי.פחות) def להחיל_עלייה (עצמי): self.sal = int ( self.sal * raise_amount) מפתח מחלקה (עובד): raise_amount = 1.10 emp_1 = מפתח ('aayushi', 'johari', 1000000) הדפס (emp_1.raise_amount)
 תְפוּקָה 1.1

כפי שאתה יכול לראות שהיא עדכנה את אחוז העלייה בשכר מ -4% ל -10%.עכשיו אם אני רוצה להוסיף עוד תכונה אחת, אמור שפת תכנות בשיטת init שלנו, אבל היא לא קיימת בכיתת ההורים שלנו. האם יש לכך פיתרון? כן! אנחנו יכולים להעתיק את כל ההיגיון של העובד ולעשות את זה אבל זה שוב יגדיל את גודל הקוד. אז כדי להימנע מכך, בואו ניקח בחשבון את הקוד שלהלן:

עובד בכיתה: מספר_עובד = 0 העלאה_סכום = 1.04 def __init __ (עצמי, ראשון, אחרון, sal): self.first = עצמי ראשון. last = last self.sal = sal self.email = ראשון + '.' + אחרון + '@ company.com' עובד. מספר_עובד + = שם מלא מלא 1 (עצמי): להחזיר '{} {}'. פורמט (עצמי.ראשון, עצמי.פחות) def להחיל_עלייה (עצמי): self.sal = int ( self.sal * raise_amount) מפתח מחלקה (עובד): raise_amount = 1.10 def __init __ (self, first, last, sal, prog_lang): super () .__ init __ (first, last, sal) self.prog_lang = prog_lang emp_1 = developer ( 'aayushi', 'johari', 1000000, 'python') הדפס (emp_1.prog_lang)

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

מעמד פיתון: פולימורפיזם

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

הבה נביא לדוגמא:

מחלקה בעלי חיים: def __init __ (עצמי, שם): self.name = שם def talk (עצמי): לעבור בכיתה כלב (בעלי חיים): def talk (עצמי): הדפס ('ווף') מחלקה חתול (בעלי חיים): def talk ( עצמי): הדפס ('MEOW!') c = חתול ('קיטי') c.talk () d = כלב (Animal) d.talk ()

פלט -

מיאו! ווף

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

כיתת פיתון: הפשטה

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

מ- abc ייבוא ​​ABC, מחלקת מופשטים עובד (ABC): @abstractmethod def calci_salary (עצמי, sal): לעבור class Developer (עובד): def calci_salary (עצמי, sal): finalalary = sal * 1.10 חזרה finalalary final emp_1 = מפתח () הדפס (emp_1.calculate_salary (10000))

תְפוּקָה-

11000.0

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

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

יש לך שאלה עבורנו? אנא הזכיר זאת במדור התגובות בבלוג 'מחלקת פיתון' ונחזור אליך בהקדם האפשרי.

כדי לקבל ידע מעמיק על Python יחד עם היישומים השונים שלו, אתה יכול עם האימון המקוון החי שלנו עם תמיכה 24/7 וגישה לכל החיים.