כימוס, הגנה ופרטיות

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

הנושא עלה פה בפורום, ממליצה על השרשור הבא:

זה לא ממש עונה, אני הבנתי שאפשר לשנות את זה בהמשך. אבל השאלה שלי היא אם משהו בקיום של זה השתנה, האם קורה משהו בזה שיש קו תחתון לפני, או שזה סתם תמרור של ‘היי, אל תיגעו בי’

הכל כתוב במחברת :slightly_smiling_face:

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

הגישה של החבאת נתונים מאחורי פעולות היא רעיון פופולרי מאוד בתכנות מונחה עצמים.
לפי רעיון שנקרא “כימוס” (Encapsulation), על מחלקה לאגד תכונות ופעולות, ולהסתיר מידע עודף מאלו שמשתמשים במחלקה.
הסתרת המידע משרתת שתי מטרות:

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

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

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

תכונה שמתחילה בתחילית __ בפייתון נקראת, כאמור, “תכונה פרטית” (private).
גם בה מותר להשתמש רק בתוך המחלקה, רק שהפעם פייתון עושה טריק מלוכלך כדי למנוע מכם להשתמש בתכונה בכל זאת.
פייתון משנה את שם התכונה לקו תחתון, שם המחלקה, שני קווים תחתונים ואז שם התכונה.

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

3 לייקים

אוקיי, הבנתי.
תודה רבה