آموزش میانبرها در برنامه نویسی شی گرا در پایتون

3 سال پیش
میانبرها در برنامه نویسی شی گرا در پایتون

آموزش میانبرها در برنامه نویسی شی گرا در پایتون

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش میانبرها در برنامه نویسی شی گرا در پایتون خواهیم پرداخت.

پیشنهاد ویژه : پکیج آموزش طراحی وب سایت با پایتون و جنگو

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

 

آموزش توابع توکار پایتون

مفسر پایتون تعدادی توابع به نام توابع توکار دارد که به راحتی برای استفاده در دسترس هستند. در آخرین نسخه خود، پایتون شامل ۶۸ تابع توکار است که در جدول زیر آمده است-

 

توابع توکار پایتون
()abs ()dict ()help ()min ()setattr
()all ()dir ()hex ()next ()slice
()any ()divmod ()id ()object ()sorted
()ascii ()enumerate ()input ()oct ()staticmethod
()bin ()eval ()int ()open ()str
()bool ()exec ()isinstance ()ord ()sum
()bytearray ()filter ()issubclass ()pow ()super
()bytes ()float ()iter ()print ()tuple
()callable ()format ()len ()property ()type
()chr ()frozenset ()list ()range ()vars
()classmethod ()getattr ()locals ()repr ()zip
()compile ()globals ()map ()reversed ()__import__
()complex ()hasattr ()max ()round
()delattr ()hash ()memoryview ()set

 

این بخش به طور خلاصه برخی از تابعهای مهم را مورد بحث قرار می دهد –

آموزش تابع ()len 

تابع ()len طول رشته ها، لیست ها یا مجموعه ها را دریافت می کند. طول یا تعداد موارد یک شیء را برمی گرداند، جایی که شیء می تواند یک رشته، لیست یا مجموعه باشد.

>>> len(['hello', 9 , 45.0, 24])
۴

 

تابع ()len به صورت توکار مانند ()list .__ len __  یا ()tuple .__ len __  عمل می کند. بنابراین، توجه داشته باشید که ()len فقط روی اشیایی کار می کند که دارای متد ()__len __ هستند.

>>> set1
{۱, ۲, ۳, ۴}
>>> set1.__len__()
۴

 

با این حال در عمل ما به دلیل تابع _()len  را به () __len__ به دلایل زیر ترجیح می دهیم –

 

  • کارآمدتر است. و ضروری نیست که یک روش خاص برای امتناع از دسترسی به روشهای خاص مانند __len__ نوشته شود.
  • نگهداری آن آسان است.
  • از سازگاری عقب پشتیبانی می کند.

 

معکوس (seq)

تکرار کننده معکوس را برمی گرداند. seq باید شیئی باشد که متد _reversed__() یا پروتکل توالی روش () __len __ و روش () __getitem __ را پشتیبانی می کند. به طور کلی برای حلقه ها استفاده می شود وقتی می خواهیم موارد را از عقب به جلو حلقه بزنیم.

>>> normal_list = [2, 4, 5, 7, 9]
>>>
>>> class CustomSequence():
   def __len__(self):
      return 5
   def __getitem__(self,index):
      return "x{0}".format(index)
>>> class funkyback():
   def __reversed__(self):
      return 'backwards!'
>>> for seq in normal_list, CustomSequence(), funkyback():
      print('\n{}: '.format(seq.__class__.__name__), end="")
      for item in reversed(seq):
         print(item, end=", ")

 

حلقه for در انتها لیست معکوس یک لیست معمولی و نمونه های دو دنباله سفارشی را چاپ می کند. خروجی نشان می دهد که  ()reversed روی هر سه مورد کار می کند ، اما وقتی __reversed__ را تعریف می کنیم نتایج بسیار متفاوتی دارد.

خروجی

هنگام اجرای کد بالا می توانید خروجی زیر را مشاهده کنید –

list: 9, 7, 5, 4, 2,
CustomSequence: x4, x3, x2, x1, x0,
funkyback: b, a, c, k, w, a, r, d, s, !,

 

متد ()enumerate  یک شمارنده را به یک تکرار شونده اضافه می کند و شیء شمارش شده را برمی گرداند.

نحو ()enumerate این است –

enumerate(iterable, start = 0)

 

در اینجا شروع آرگومان دوم اختیاری است و به طور پیش فرض شاخص با صفر (۰) شروع می شود.

>>> # Enumerate
>>> names = ['Rajesh', 'Rahul', 'Aarav', 'Sahil', 'Trevor']
>>> enumerate(names)
<enumerate object at 0x031D9F80>
>>> list(enumerate(names))
[(۰, 'Rajesh'), (1, 'Rahul'), (2, 'Aarav'), (3, 'Sahil'), (4, 'Trevor')]
>>>

 

بنابراین ()enumerate  یک تکرار کننده را باز می گرداند که یک تاپل را نشان می دهد که تعداد عناصر در دنباله منتقل شده را حفظ می کند. از آنجا که مقدار بازگشتی یک تکرار کننده است، دسترسی مستقیم به آن چندان مفید نیست. یک رویکرد بهتر برای ()enumerate  نگه داشتن تعداد در یک حلقه for است.

>>> for i, n in enumerate(names):
   print('Names number: ' + str(i))
   print(n)
Names number: 0
Rajesh
Names number: 1
Rahul
Names number: 2
Aarav
Names number: 3
Sahil
Names number: 4
Trevor

 

بسیاری از توابع دیگر در کتابخانه استاندارد وجود دارد و در اینجا لیستی دیگر از توابع بیشتر مورد استفاده قرار می گیرد –

  • hasattr ،getattr ،setattr و delattr  که اجازه می دهد ویژگی های یک شی با نام رشته آنها دستکاری شود.
  • all و any، که یک شی تکرار شونده را می پذیرند و اگر همه یا هر یک از موارد به عنوان درست ارزیابی شوند ، True را برمی گردانند.
  • nzip، که دو یا چند دنباله می گیرد و یک دنباله جدید از چندتایی را برمی گرداند ، که در آن هر تاپل از هر دنباله یک مقدار واحد دارد.

 

فایل ورودی/خروجی

مفهوم فایل ها با عبارت برنامه نویسی شی گرا مرتبط است. پایتون رابط کاربری سیستم عامل ها را بصورت انتزاعی ارائه کرده است که به ما امکان کار با اشیاء فایل را می دهد.

تابع ()open  ساخته شده برای باز کردن یک فایل و بازگشت یک شیء فایل استفاده می شود. این متداول ترین تابع با دو آرگومان است –

open(filename, mode)

 

تابع ()open دو آرگومان می خواند، اول نام فایل و دوم state. در اینجا state می تواند برای حالت فقط خواندنی r باشد ، فقط برای نوشتن w. تا انتها ‘r+’ فایل را برای خواندن و نوشتن باز می کند. حالت پیش فرض فقط قابل خواندن است.

در پنجره ها، “b” ضمیمه به حالت پرونده را در حالت باینری باز می کند، بنابراین حالت هایی مانند “rb” ، “wb” و “r+b” نیز وجود دارد.

>>> text = 'This is the first line'
>>> file = open('datawork','w')
>>> file.write(text)
۲۲
>>> file.close()

 

در برخی موارد، ما فقط می خواهیم فایل موجود را ضمیمه کنیم و نه آن را بیش از حد بنویسیم، زیرا می توانیم مقدار “a” را به عنوان یک آرگومان حالت اضافه کنیم تا به انتهای فایل اضافه شود ، نه اینکه فایل موجود را کاملاً بازنویسی کنیم. فهرست.

>>> f = open('datawork','a')
>>> text1 = ' This is second line'
>>> f.write(text1)
۲۰
>>> f.close()

 

هنگامی که یک فایل برای خواندن باز می شود، می توانیم متد read ،readline یا خطوط خواندن را برای بدست آوردن محتویات فایل فراخوانی کنیم. متد read بسته به اینکه آرگومان دوم ‘b’ باشد ، کل محتویات فایل را به عنوان یک شی str یا bytes باز می گرداند.

برای خوانایی و جلوگیری از خواندن یک فایل بزرگ در یک زمان، اغلب بهتر است از حلقه for به طور مستقیم بر روی یک شیء فایل استفاده کنید. برای فایل های متنی، هر خط را یک به یک می خواند و ما می توانیم آن را در داخل بدن حلقه پردازش کنیم. برای فایل های باینری، بهتر است تکه های داده با اندازه ثابت را با استفاده از روش ()read  بخوانید و پارامتری را برای حداکثر تعداد بایت برای خواندن ارسال کنید.

>>> f = open('fileone','r+')
>>> f.readline()
'This is the first line. \n'
>>> f.readline()
'This is the second line. \n'

 

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

سرانجام هنگام بستن یا خواندن فایل، روش ()close را باید فراخوانی کرد تا مطمئن شویم که نوشته های بافر شده روی دیسک نوشته شده اند، فایل به درستی پاک شده است و همه منابع مرتبط با فایل به عقب بازگردانده می شوند. سیستم عامل رویکرد بهتری برای فراخوانی متد ()close  است اما از نظر فنی این امر به صورت خودکار هنگامی که اسکریپت وجود داشته باشد اتفاق می افتد.

جایگزینی برای اورلود کردن روش

اورلود روش به داشتن چندین روش با یک نام اشاره می کند که مجموعه های مختلف آرگومان را می پذیرند.

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

class Human:
   def sayHello(self, name = None):
      if name is not None:
         print('Hello ' + name)
      else:
         print('Hello ')

#Create Instance
obj = Human()

#Call the method, else part will be executed
obj.sayHello()

#Call the method with a parameter, if part will be executed
obj.sayHello('Rahul')

 

خروجی

Hello
Hello Rahul

 

 

آموزش آرگومان های پیش فرض در برنامه نویسی شی گرا در پایتون

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

هر تابع در پایتون یک شی است. اشیاء می توانند شامل متدها یا توابع باشند اما شیء یک تابع ضروری نیست.

def my_func():
   print('My function was called')
my_func.description = 'A silly function'
def second_func():

   print('Second function was called')

   second_func.description = 'One more sillier function'

def another_func(func):
   print("The description:", end=" ")
   print(func.description)
   print('The name: ', end=' ')
   print(func.__name__)
   print('The class:', end=' ')
   print(func.__class__)
   print("Now I'll call the function passed in")
   func()

another_func(my_func)
another_func(second_func)

 

در کد بالا ما می توانیم دو تابع مختلف را به عنوان آرگومان به تابع سوم خود منتقل کنیم و برای هر یک خروجی متفاوتی دریافت کنیم –

The description: A silly function
The name: my_func
The class: 
Now I'll call the function passed in
My function was called
The description: One more sillier function
The name: second_func
The class: 
Now I'll call the function passed in
Second function was called

 

اشیاء قابل فراخوانی

همانطور که توابع اجسامی هستند که می توانند ویژگی هایی روی آنها داشته باشند، می توان یک شی ایجاد کرد که بتوان آن را مانند یک تابع فراخوانی کرد.

در پایتون هر شی با روش ()__call __  می تواند با استفاده از function-call فراخوانی شود.

 

منبع.

لیست جلسات آموزش برنامه نویسی شی گرا در پایتون

  1. آموزش برنامه نویسی شی گرا در پایتون
  2. آموزش مقدماتی برنامه نویسی شی گرا در پایتون
  3. آموزش راه اندازی محیط برنامه نویسی شی گرا در پایتون
  4. آموزش ساختار داده برنامه نویسی شی گرا در پایتون
  5. آموزش بلوک ها در برنامه نویسی شی گرا در پایتون
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه