מערכת טיפוסים – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
שורה 25:
 
טיפוסיות ברווז משמשת לרוב בשפות מפורשות מונחות-עצמים. במקרה כזה כל קריאה למתודה של אובייקט בודקת בזמן הקריאה דבר אחד: האם יש לאובייקט המדובר מתודה בשם הזה. אין כל דרישה אחרת על המחלקה אליה שייך האובייקט. לדוגמה, ב[[פייתון]] הפונקציה len בודקת אורך של רשימות, מחרוזות, וכו'. אבל הפונקציה לא דורשת שהפרמטר שלה יהיה מטיפוס כזה או אחר. כל מה שהיא דורשת היא שתהיה לו מתודה __len__ המקבלת ארגומנט יחיד. כך ניתן להגדיר מחלקה length17, שעבור אובייקטים השייכים לה "האורך שלהם" יהיה תמיד 17:
 
<div class="mw-content-ltr">
<source lang="python">
class length17:
def __len__(self):
return 17
שורה 34 ⟵ 35:
x=length17()
print(len(x)) #prints 17
</divsource>
 
כך הטיפוס של הפרמטר לפונקציה len הוא "אובייקט שעבורו מוגדרת המתודה __len__ כנדרש". טיפוסיות דינמית משיגה [[פולימורפיזם]] פרמטרי מקסימלי. יש לשים לב, עם זאת, שהנחת היסוד היא שמתודות בעלות שם זהה מתנהגות בצורה דומה. אובייקט עשוי לכלול מתודה בעלת שם מתאים בדרך מקרה, כאשר המימוש שלו מבצע פעולה שונה לחלוטין מזו המצופה בפונקציה. שגיאות מסוג זה הן נדירות, אך קשות מאוד לאיתור.