Python __getattribute__() שיטת קסם – Finxter

Share on facebook
Share on twitter
Share on linkedin
Share on telegram
Share on whatsapp
Share on email
פרסומת
תכנון תשתיות רפואיות


שיטת הקסם של פייתון __getattribute__() מיישם את המובנה getattr() פונקציה שמחזירה את הערך המשויך לשם תכונה נתון. אם ה __getattribute__() שגיאה גורמת ל- an AttributeError עקב תכונה לא קיימת, Python יקרא ל- __getattr__() פונקציה לרזולוציה.

לפיכך, ה __getattribute__() השיטה עדיפה על ה __getattr__() שיטה.

אנחנו קוראים לזה א "שיטת דאנדר" ל "דאובל תַחַתשיטת ניקוד" (המכונה גם "שיטת קסם"). לקבל רשימה של כל שיטות הדנדר עם הסבר, בדוק את שלנו מאמר גיליון הונאה של dunder בבלוג הזה.

תחביר ודוגמה מינימלית

object.__getattribute__(self, attr_name)

בוא נסתכל על דוגמה שבה אתה מחליף את __getattribute__ שיטת קסם של מחלקה מותאמת אישית Person פשוט להדפיס את המחרוזת 'hello world' כאשר מתקשרים ל getattr() פונקציה מובנית.

class Person:
    def __getattribute__(self, attr_name):
        print('hello world')
    

alice = Person()
getattr(alice, 'age')
# hello world

__getattribute__ לעומת __getattr__

ה __getattribute__ השיטה דומה ל __getattr__. מה ההבדל?

נניח שמשתמש רוצה לגשת לתכונה מאובייקט נתון כך:

my_obj.my_attr
  • my_obj.__getattribute__(my_attr) נקרא ראשון. אם זה מניב an AttributeError, Python ימסור אותו ל:
  • my_obj.__getattr__(my_attr) שנקרא שני.

אתה יכול לראות שהראשון מקבל עדיפות על השני בקטע הקוד הבא שמגדיר את שתי השיטות – אבל __getattribute__() נלקח מכיוון שהוא לא גורם לשגיאה.

class Person:
    def __getattribute__(self, attr_name):
        print('hello world')

    def __getattr__(self, attr_name):
        print('hello universe')
    

alice = Person()
getattr(alice, 'age')
# hello world

הנה מה שהיה קורה באותו תרחיש בעת העלאת AttributeError ב __getattribute__:

class Person:
    def __getattribute__(self, attr_name):
        raise AttributeError

    def __getattr__(self, attr_name):
        print('hello universe')
    

alice = Person()
getattr(alice, 'age')
# hello universe

Python אפילו לא מזכיר את השגיאה אלא מעביר את זרימת הביצוע ל- __getattr__() שיטה.

רקע getattr()

מובנה של Python getattr(object, string) הפונקציה מחזירה את הערך של objectהתכונה של עם השם string.

אם זה לא קיים, הוא מחזיר את הערך שסופק כשליש אופציונלי default טַעֲנָה.

אם גם זה לא קיים, זה מעלה an AttributeError.

דוגמה היא getattr(porsche, 'speed') שהוא שווה ערך ל porsche.speed.

# Define class with one attribute
class Car:
    def __init__(self, brand, speed):
        self.brand = brand
        self.speed = speed


# Create object
porsche = Car('porsche', 100)
tesla = Car('tesla', 110)

# Two alternatives to get instance attributes:
print(getattr(porsche, 'brand') + " " + str(getattr(porsche, 'speed')))
print(tesla.brand + " " + str(tesla.speed))


# Get an attribute that doesn't exist with default argument:
print(getattr(porsche, 'color', 'red'))

תְפוּקָה:

porsche 100
tesla 110
red

לקריאה נוספת:

לאן ללכת מכאן?

די לתיאוריה. בואו נתאמן קצת!

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

אתה בונה מיומנויות קידוד בעלות ערך גבוה על ידי עבודה על פרויקטי קידוד מעשיים!

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

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

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

הצטרפו עכשיו לסמינר המקוון בחינם!



קישור לכתבת המקור – 2022-01-09 18:14:08

Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
LinkedIn
Share on telegram
Telegram
Share on whatsapp
WhatsApp
Share on email
Email
פרסומת
תכנון תשתיות רפואיות

עוד מתחומי האתר