Anophel-آنوفل مفهوم Duck Typing در پایتون

مفهوم Duck Typing در پایتون

انتشار:
1

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

 

اگر میخواهید پایتون را بهتر یاد بگیرید، می توانید از وب سایت آنوفل با ارائه آموزش مقدماتی پایتون و آموزش پیشرفته پایتون استفاده کنید.

 

Duck typing چیست؟

Duck Typing یک سیستم نوع داده در پایتون می باشد. این سیستم در زبان های پویا(Dynamic Language) مثل PHP و جاوااسکریپت و .. وجود دارد. این سیستم به این گونه می باشد که در آن نوع یا آبجکت یک کلاس نسبت به روشی که تعریف می شود اهمیت کمتری دارد. به صورت دیگری بخواهم بیانش کنم ما زمانی میایم از این مفهوم استفاده می کنیم که نوع اطلاعات ورودی اهمیتی ندارد و فقط می خواهیم که اطلاعات ورودی ما یک ویژگی خاص داشته باشند. و این ویژگی خاص متد یا attribute می باشد.

 

این Duck Typing  از جمله زیر اهام گرفته شده:

 

“If it looks like a duck and quacks like a duck, it’s a duck”
یعنی اگر شبیه اردک است و شبیه صدای اردک است، اردک است

برای مثال:

 


# duck typing

class Specialstring:
	def __len__(self):
		return "Anophel.com"

# Driver's code
if __name__ == "__main__":

	string = Specialstring()
	print(len(string))

#output => Anophel.com

ما در کد های بالا متد __len__ را تعریف کردیم و آرگومان آن self  می باشد که این self نمونه یا همان آبجکت ما می باشد. و برای ما یک جمله ای را برگشت می دهد. سپس ما یک متغیر تعریف کردیم و به آن متد Specialstring دادیم. و سپس به متد __len__ ما Specialstring را دادیم.

 

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

 

اگر بخواهم یک مثال دیگر بزنم که با مفاهیم شی گرایی نباشد، بهترین مثال تابع len می باشد. (دقت کنید تابع len ) به این صورت که اگر شما به این تابع یک لیست یا یک جمله ای بدهید برای شما طولش را حساب می کند و اصلا به وزودی اهمیتی نمی دهد. اما اگر شما به آن عدد بدهید برای شما یک error می دهد که دلیلش مشخص هست.

 

len("Anophel.com")

#output => 11

بریم سراغ یک مثال دیگر در شی گرایی :

 


# duck typing


class Car:
	def Propulsion(self):
		print("Propulsion with rubber")

class Airplane:
	def Propulsion(self):
		print("fly with fuel")

class Fish:
	def swim(self):
		print("fish swim in sea")

# Attributes having same name are
# considered as duck typing
for obj in Car(), Airplane(), Fish():
	obj.Propulsion()

# Output => 
# Propulsion with rubber
# fly with fuel

و یک error  خواهیم داشت به شکل زیر:

 

Traceback (most recent call last):
  File "main.py", line 11, in 
    obj.fly()
AttributeError: 'Fish' object has no attribute 'fly'

در این مثال، می‌توانیم ببینیم که یک کلاس از برخی متدها پشتیبانی می‌کند، و می‌توانیم آن را تغییر دهیم یا عملکرد جدیدی به آنها اضافه کنیم. duck typing بر آنچه که آبجکت واقعاً می تواند انجام دهد، تأکید می کند تا اینکه خود آبجکت چیست.

 

#تایپ_اردکی#پایتون#duck_typing
نظرات ارزشمند شما :

در حال دریافت...

مقاله های مشابه

در حال دریافت...