>שקול את קטע הקוד הבא שבו אתה מנסה לחשב את פעולת הזזה ימינה על אובייקטים מותאמים אישית מבלי להגדיר את שיטת האנדר __rshift__():class Data:
pass
a = Data()
b = Data()
print(a >> b)הפעלה זו מובילה להודעת השגיאה הבאה במחשב שלי:Traceback (most recent call last):
File "C:UsersxcentDesktopcode.py", line 8, in <module>
print(a >> b)
TypeError: unsupported operand type(s) for >>: 'Data' and 'Data'הסיבה לשגיאה זו היא ש __rshift__() השיטה מעולם לא הוגדרה - והיא אינה מוגדרת עבור אובייקט מותאם אישית כברירת מחדל. אז, כדי לפתור את TypeError: unsupported operand type(s) for >>, עליך לספק את __rshift__(self, other) שיטה בהגדרת הכיתה שלך כפי שמוצג קודם:class Data:
def __rshift__(self, other):
return '... my result of rshift...'כמובן שתשתמש בערך החזר אחר בפועל כפי שמוסבר ב "שינוי רקע ברקע ()" סָעִיף.Python __rshift__ לעומת __rrshift__תגיד, אתה רוצה לחשב את פעולת הזזה ימינה על שני אובייקטים מותאמים אישית x ו y:print(x >> y)פייתון מנסה קודם כל לקרוא לאובייקט השמאלי __rshift__() שיטה x.__rshift__(y). אבל זה עשוי להיכשל משתי סיבות:השיטה x.__rshift__() אינו מיושם מלכתחילה, אוהשיטה x.__rshift__() מיושם אך מחזיר א NotImplemented ערך המציין כי סוגי הנתונים אינם תואמים.אם זה נכשל, Python מנסה לתקן את זה על ידי התקשרות ל- y.__rrshift__() ל הפוך ימינה ימינה באופראנד הנכון y. לא שזה לא אותו דבר כמו משמרת שמאלה, זה רק אומר שמבצע הזזה ימינה נקרא באופראנד השני y.אם מיושמת שיטת הזזה הימנית ההפוכה, Python יודע שהיא לא נתקלת בבעיה פוטנציאלית של פעולה לא-קומוטטיבית. אם זה היה פשוט מבוצע y.__rshift__(x) במקום x.__rshift__(y)התוצאה תהיה שגויה מכיוון שהפעולה אינה קומוטיבית. בגלל זה y.__rrshift__(x) נחוץ.אז ההבדל בין x.__rshift__(y) ו x.__rrshift__(y) הוא שהראשון מחשב x >> y ואילו האחרון מחשב y >> x - שניהם קוראים לשיטה המתאימה המוגדרת על האובייקט x.אתה יכול לראות את זה בפועל כאן שבו אנו מנסים לקרוא למבצע באופראנד השמאלי x- אך מכיוון שהוא אינו מיושם, פייתון פשוט מכנה את הפעולה ההפוכה באופראנד הנכון y.class Data_1:
pass
class Data_2:
def __rrshift__(self, other):
return 'called reverse rshift'
x = Data_1()
y = Data_2()
print(x >> y)
# called reverse rshift
הפניות:לאן ללכת מכאן?מספיק תיאוריה, בואו נעשה קצת תרגול!כדי להצליח בקידוד, אתה צריך לצאת ולפתור בעיות אמיתיות לאנשים אמיתיים. כך תוכל להפוך למרוויח בן שש ספרות בקלות. וככה אתה מלטש את הכישורים שאתה באמת צריך בפועל. אחרי הכל, מה התועלת בתורת הלמידה שאף אחד לא צריך?תרגול פרויקטים הוא איך אתה מחדד את המסור שלך בקידוד!האם אתה רוצה להיות אמן קוד על ידי התמקדות בפרויקטים קודיים מעשיים שבעצם מרוויחים לך כסף ופותרים בעיות לאנשים?לאחר מכן הפך למפתח עצמאי של פייתון! זו הדרך הטובה ביותר להתקרב למשימה של שיפור כישורי ה- Python שלך - גם אם אתה מתחיל לגמרי.הצטרף לוובינר החינמי שלי "כיצד לבנות את פייתון מיומנות בעלת הכנסה גבוהה" וצפה כיצד גידלתי את עסקי הקידוד שלי באינטרנט וכיצד אתה יכול גם - מהנוחות של הבית שלך.הצטרף עכשיו לוובינר החינמי! בעת שעבד כחוקר במערכות מבוזרות, ד"ר כריסטיאן מאייר מצא את אהבתו ללמד סטודנטים למדעי המחשב.כדי לעזור לסטודנטים להגיע לרמות גבוהות יותר של הצלחה בפייתון, הוא הקים את אתר החינוך לתכנות Finxter.com. הוא מחבר ספר התכנות הפופולרי Python One-Liners (NoStarch 2020), מחבר שותף של פייתון של הפסקת קפה סדרת ספרים בהוצאה עצמית, חובב מדעי המחשב, סוֹפֵר בִּלתִי תָלוּי, ובעלים של אחד מ -10 הגדולים ביותר בלוגים של פייתון עוֹלָמִי.התשוקות שלו הן כתיבה, קריאה וקידוד. אבל התשוקה הגדולה ביותר שלו היא לשרת קודנים שאפתניים באמצעות Finxter ולעזור להם לשפר את כישוריהם. אתה יכול הצטרף לאקדמיה הדוא"ל החינמית שלו כאן. .
[ad_2]
קישור לכתבת המקור - 2021-10-09 09:37:03" />
>שקול את קטע הקוד הבא שבו אתה מנסה לחשב את פעולת הזזה ימינה על אובייקטים מותאמים אישית מבלי להגדיר את שיטת האנדר __rshift__():class Data:
pass
a = Data()
b = Data()
print(a >> b)הפעלה זו מובילה להודעת השגיאה הבאה במחשב שלי:Traceback (most recent call last):
File "C:UsersxcentDesktopcode.py", line 8, in <module>
print(a >> b)
TypeError: unsupported operand type(s) for >>: 'Data' and 'Data'הסיבה לשגיאה זו היא ש __rshift__() השיטה מעולם לא הוגדרה - והיא אינה מוגדרת עבור אובייקט מותאם אישית כברירת מחדל. אז, כדי לפתור את TypeError: unsupported operand type(s) for >>, עליך לספק את __rshift__(self, other) שיטה בהגדרת הכיתה שלך כפי שמוצג קודם:class Data:
def __rshift__(self, other):
return '... my result of rshift...'כמובן שתשתמש בערך החזר אחר בפועל כפי שמוסבר ב "שינוי רקע ברקע ()" סָעִיף.Python __rshift__ לעומת __rrshift__תגיד, אתה רוצה לחשב את פעולת הזזה ימינה על שני אובייקטים מותאמים אישית x ו y:print(x >> y)פייתון מנסה קודם כל לקרוא לאובייקט השמאלי __rshift__() שיטה x.__rshift__(y). אבל זה עשוי להיכשל משתי סיבות:השיטה x.__rshift__() אינו מיושם מלכתחילה, אוהשיטה x.__rshift__() מיושם אך מחזיר א NotImplemented ערך המציין כי סוגי הנתונים אינם תואמים.אם זה נכשל, Python מנסה לתקן את זה על ידי התקשרות ל- y.__rrshift__() ל הפוך ימינה ימינה באופראנד הנכון y. לא שזה לא אותו דבר כמו משמרת שמאלה, זה רק אומר שמבצע הזזה ימינה נקרא באופראנד השני y.אם מיושמת שיטת הזזה הימנית ההפוכה, Python יודע שהיא לא נתקלת בבעיה פוטנציאלית של פעולה לא-קומוטטיבית. אם זה היה פשוט מבוצע y.__rshift__(x) במקום x.__rshift__(y)התוצאה תהיה שגויה מכיוון שהפעולה אינה קומוטיבית. בגלל זה y.__rrshift__(x) נחוץ.אז ההבדל בין x.__rshift__(y) ו x.__rrshift__(y) הוא שהראשון מחשב x >> y ואילו האחרון מחשב y >> x - שניהם קוראים לשיטה המתאימה המוגדרת על האובייקט x.אתה יכול לראות את זה בפועל כאן שבו אנו מנסים לקרוא למבצע באופראנד השמאלי x- אך מכיוון שהוא אינו מיושם, פייתון פשוט מכנה את הפעולה ההפוכה באופראנד הנכון y.class Data_1:
pass
class Data_2:
def __rrshift__(self, other):
return 'called reverse rshift'
x = Data_1()
y = Data_2()
print(x >> y)
# called reverse rshift
הפניות:לאן ללכת מכאן?מספיק תיאוריה, בואו נעשה קצת תרגול!כדי להצליח בקידוד, אתה צריך לצאת ולפתור בעיות אמיתיות לאנשים אמיתיים. כך תוכל להפוך למרוויח בן שש ספרות בקלות. וככה אתה מלטש את הכישורים שאתה באמת צריך בפועל. אחרי הכל, מה התועלת בתורת הלמידה שאף אחד לא צריך?תרגול פרויקטים הוא איך אתה מחדד את המסור שלך בקידוד!האם אתה רוצה להיות אמן קוד על ידי התמקדות בפרויקטים קודיים מעשיים שבעצם מרוויחים לך כסף ופותרים בעיות לאנשים?לאחר מכן הפך למפתח עצמאי של פייתון! זו הדרך הטובה ביותר להתקרב למשימה של שיפור כישורי ה- Python שלך - גם אם אתה מתחיל לגמרי.הצטרף לוובינר החינמי שלי "כיצד לבנות את פייתון מיומנות בעלת הכנסה גבוהה" וצפה כיצד גידלתי את עסקי הקידוד שלי באינטרנט וכיצד אתה יכול גם - מהנוחות של הבית שלך.הצטרף עכשיו לוובינר החינמי! בעת שעבד כחוקר במערכות מבוזרות, ד"ר כריסטיאן מאייר מצא את אהבתו ללמד סטודנטים למדעי המחשב.כדי לעזור לסטודנטים להגיע לרמות גבוהות יותר של הצלחה בפייתון, הוא הקים את אתר החינוך לתכנות Finxter.com. הוא מחבר ספר התכנות הפופולרי Python One-Liners (NoStarch 2020), מחבר שותף של פייתון של הפסקת קפה סדרת ספרים בהוצאה עצמית, חובב מדעי המחשב, סוֹפֵר בִּלתִי תָלוּי, ובעלים של אחד מ -10 הגדולים ביותר בלוגים של פייתון עוֹלָמִי.התשוקות שלו הן כתיבה, קריאה וקידוד. אבל התשוקה הגדולה ביותר שלו היא לשרת קודנים שאפתניים באמצעות Finxter ולעזור להם לשפר את כישוריהם. אתה יכול הצטרף לאקדמיה הדוא"ל החינמית שלו כאן. .
[ad_2]
קישור לכתבת המקור - 2021-10-09 09:37:03" />
הפיתון __rshift__() השיטה מיישמת את המובנה >> פעולה. אז, כאשר אתה cal x >> y, פייתון מנסה להתקשר x.__rshift__(y). אם השיטה לא מיושמת, פייתון מנסה קודם כל להתקשר __rrshift__ באופראנד הנכון ואם גם זה לא מיושם, זה מעלה א TypeError.