You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: lessons/l20.rst
+35-3Lines changed: 35 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -160,13 +160,13 @@ Method Overriding
160
160
print('Animal, breathing...')
161
161
162
162
defwalk(self):
163
-
print('Animal, wlking...')
163
+
print('Animal, walking...')
164
164
165
165
166
166
classDog(Animal):
167
167
168
168
defwalk(self):
169
-
print('Dog, wlking...')
169
+
print('Dog, walking...')
170
170
171
171
172
172
dog = Dog()
@@ -177,7 +177,7 @@ Method Overriding
177
177
::
178
178
179
179
Animal, breathing...
180
-
Dog, wlking...
180
+
Dog, walking...
181
181
182
182
در این نمونه کد، کلاس Dog از کلاس Animal ارثبری دارد و متد ``walk`` از کلاس Animal را Override کرده است. همانطور که از خروجی مشاهده میشود، برخلاف متد ``breathe``، هنگام فراخوانی متد ``walk`` توسط شی Dog، متد بازپیادهسازی شده موجود در این کلاس فراخوانی میشود.
183
183
@@ -198,6 +198,38 @@ Method Overriding
198
198
Method Overloading
199
199
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
200
200
201
+
این نوع از چندریختی به امکان کنارهم قرار گرفتن چندین متد همنام ولی با پارامترهای متفاوت (از نظر تعداد و نوع) در کنار هم میباشد. یک شی میتواند با ارسال آرگومانهای متفاوت و فراخوانی یک نام یکسان از متد، کارهای متفاوتی را به انجام برساند.
202
+
203
+
همانطور که در قسمت پیش نیز اشاره شد، در زبان برنامهنویسی پایتون تعداد و نوع پارامترهای تعریف شده برای یک تابع یا متد، هیچ ارتباطی با هویت آن متد ندارد و یک متد تنها با نام آن شناسایی میشود. **بنابراین Method Overloading در پایتون پشتیبانی نمیشود** و چنانچه چندین متد یا تابع همنام با پارامترهای متفاوت در یک کلاس یا ماژول در کنار هم باشند، خطایی رخ نمیدهد ولی باید توجه داشته باشید که متد یا تابع آخر، تمام موارد پیش از خود را در زیر سایه خواهد گرفت:
204
+
205
+
.. code-block:: python
206
+
:linenos:
207
+
208
+
classAnimal:
209
+
210
+
defbreathe(self):
211
+
print('breathing...')
212
+
213
+
defwalk(self):
214
+
print('walking...')
215
+
216
+
defwalk(self, time=30):
217
+
print(f'{time} minutes, walking...')
218
+
219
+
defwalk(self, minutes=30, seconds=59):
220
+
print(f'{minutes} minutes and {seconds} seconds, walking...')
221
+
222
+
223
+
animal = Animal()
224
+
animal.walk()
225
+
226
+
227
+
::
228
+
229
+
30 minutes and 59 seconds, walking...
230
+
231
+
232
+
همانطور که از خروجی نمونه کد بالا مشاهده میشود، با فراخوانی متد ``walk`` توسط شی Animal، از میان سه متد تعریف شده، این آخرین متد است که اجرا میگردد.
0 commit comments