پایتون

Welcome!

This community is for professionals and enthusiasts of our products and services.
Share and discuss the best content and new marketing ideas, build your professional profile and become a better marketer together.

9

اصل Duck Typing یا تایپ اردک در پایتون و یا سایر زبان‌های برنامه نویسی مشابه به چه معنی هست و چه کاربردی دارد؟

آواتار
مصطفی برمشوری

پایتون از یک سیستم معروف به تایپ اردک استفاده گسترده ای می کند. بسیاری از کلاس‌ها و ابزارهای داخلی از این نوع سیستم پشتیبانی می‌کنند، که آنها را بسیار انعطاف‌پذیر و جدا از هم می‌کند.

تایپ اردک یک مفهوم اصلی در پایتون است. یادگیری در مورد این موضوع به شما کمک می کند تا درک کنید که زبان چگونه کار می کند و مهمتر از آن، نحوه استفاده از این رویکرد در کد خود.

معنی دقیق داک تایپینگ یا Dock Typing چی هست و چطور توی پایتون کار می‌کنه؟

آواتار
رها کردن
1 پاسخ
7
آواتار
مصطفی برمشوری
بهترین پاسخ

در برنامه نویسی شی گرا، کلاس ها عمدتاً هدفشان کپسوله کردن داده ها و رفتارها است. با استفاده از این ایده، اگر یک مدل و شئی جایگزین همان رفتارها را ارائه دهد، بدون در نظر گرفتن اینکه این جایگزین چیست، می‌توانید با ابجکت اصلی جایگزین شود. کدی که از رفتارها استفاده می کند صرف نظر از اینکه چه شی ای آن را ارائه می دهد، کار خواهد کرد. این اصل اساس یک سیستم نوع شناخته شده به نام اردک تایپ است.

اما در اصل این نوع سیستم چه تفاوتی با وراثت و Interface در زبان‌هایی مثل جاوا دارد؟

در جاوا و زبان‌های مشابه زمانی که شما تابع را پیاده سازی می‌کنید نوع ورودی و خروجی را به صورت دقیق مشخص می‌کنید. بنابر این نه تنها یک ورودی باید از نوع تعیین شده باشد بلکه در نتیجه آن باید رفتاری کاملا مشابه به آن نشان دهد.

اما در زبان برنامه نویسی پایتون نیازی به تعیین کردن نوع ورودی نیست. بنابر این اگر هر شئی ورودی تابع از هر نوعی رفتار مشابه‌ای با انچه در تابع انتظار می‌رود را داشته باشد،  کار تمام است.

مثل فرض کنید در یک تابع شما انتظار دارید اشیا ورودی دو تابع swim و fly را داشته باشند. در این حالت اگر ما اشیا زیر را داشته باشیم:

class Duck:
    def swim(self):
        print("The duck is swimming")

    def fly(self):
        print("The duck is flying")

class Swan:
    def swim(self):
        print("The swan is swimming")

    def fly(self):
        print("The swan is flying")

class Albatross:
    def swim(self):
        print("The albatross is swimming")

    def fly(self):
        print("The albatross is flying")

می‌توانیم همه آنها را (با وجود اینکه از هم ارث بری ندارند) را به عنوان ورودی به متد ارسال کنیم:


>>> from birds_v1 import Duck, Swan, Albatross


>>> birds = [Duck(), Swan(), Albatross()]


>>> for bird in birds:
...     bird.fly()
...     bird.swim()
...
The duck is flying
The duck is swimming
The swan is flying
The swan is swimming
The albatross is flying
The albatross is swimming

به این اصل می‌گن داک تایپ یا تایپ اردک.


آواتار
رها کردن