Skip to content

Commit 884108c

Browse files
author
Saeid Darvish
committed
l20: Method Overloading
1 parent 63cf97a commit 884108c

2 files changed

Lines changed: 38 additions & 6 deletions

File tree

lessons/l18.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
class Animal:
4747
4848
def walk(self):
49-
print(f'{self.__class__.__name__}: wlking...')
49+
print(f'{self.__class__.__name__}: walking...')
5050
5151
def breathe(self):
5252
print(f'{self.__class__.__name__}: breathing...')
@@ -79,11 +79,11 @@
7979
8080
::
8181

82-
Sparrow: wlking...
82+
Sparrow: walking...
8383
Sparrow: breathing...
8484
Sparrow: flying...
8585
------------------------------
86-
Dog: wlking...
86+
Dog: walking...
8787
Dog: breathing...
8888
Dog: running...
8989

lessons/l20.rst

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,13 +160,13 @@ Method Overriding
160160
print('Animal, breathing...')
161161
162162
def walk(self):
163-
print('Animal, wlking...')
163+
print('Animal, walking...')
164164
165165
166166
class Dog(Animal):
167167
168168
def walk(self):
169-
print('Dog, wlking...')
169+
print('Dog, walking...')
170170
171171
172172
dog = Dog()
@@ -177,7 +177,7 @@ Method Overriding
177177
::
178178

179179
Animal, breathing...
180-
Dog, wlking...
180+
Dog, walking...
181181

182182
در این نمونه کد، کلاس Dog از کلاس Animal ارث‌بری دارد و متد ``walk`` از کلاس Animal را Override کرده است. همانطور که از خروجی مشاهده می‌شود، برخلاف متد ``breathe``، هنگام فراخوانی متد ``walk`` توسط شی Dog، متد باز‌پیاده‌سازی شده موجود در این کلاس فراخوانی می‌شود.
183183

@@ -198,6 +198,38 @@ Method Overriding
198198
Method Overloading
199199
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
200200

201+
این نوع از چندریختی به امکان کنارهم قرار گرفتن چندین متد همنام ولی با پارامترهای متفاوت (از نظر تعداد و نوع) در کنار هم می‌باشد. یک شی می‌تواند با ارسال آرگومان‌های متفاوت و فراخوانی یک نام یکسان از متد، کارهای متفاوتی را به انجام برساند.
202+
203+
همانطور که در قسمت پیش نیز اشاره شد، در زبان برنامه‌نویسی پایتون تعداد و نوع پارامترهای تعریف شده برای یک تابع یا متد، هیچ ارتباطی با هویت آن متد ندارد و یک متد تنها با نام آن شناسایی می‌شود. **بنابراین Method Overloading در پایتون پشتیبانی نمی‌شود** و چنانچه چندین متد یا تابع همنام با پارامترهای متفاوت در یک کلاس یا ماژول در کنار هم باشند، خطایی رخ نمی‌دهد ولی باید توجه داشته باشید که متد یا تابع آخر، تمام موارد پیش از خود را در زیر سایه خواهد گرفت:
204+
205+
.. code-block:: python
206+
:linenos:
207+
208+
class Animal:
209+
210+
def breathe(self):
211+
print('breathing...')
212+
213+
def walk(self):
214+
print('walking...')
215+
216+
def walk(self, time=30):
217+
print(f'{time} minutes, walking...')
218+
219+
def walk(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، از میان سه متد تعریف شده، این آخرین متد است که اجرا می‌گردد.
201233

202234

203235
Operator Overloading

0 commit comments

Comments
 (0)