Pintasan Berorientasi Objek

Bab ini membahas secara detail tentang berbagai fungsi bawaan dengan Python, operasi I / O file, dan konsep overloading.

Fungsi Bawaan Python

Penerjemah Python memiliki sejumlah fungsi yang disebut fungsi bawaan yang sudah tersedia untuk digunakan. Dalam versi terbarunya, Python berisi 68 fungsi bawaan seperti yang tercantum dalam tabel yang diberikan di bawah ini -

FUNGSI BANGUN
abs () dikt () Tolong() min () setattr ()
semua() dir () hex () lanjut() mengiris()
apa saja() divmod () Indo() obyek() diurutkan ()
ascii () menghitung() memasukkan() okt () staticmethod ()
tempat sampah() eval () int () Buka() str ()
bool () exec () isinstance () ord () jumlah()
bytearray () Saring() issubclass () pow () super()
byte () mengapung() iter () mencetak() tuple ()
callable () format() len () Properti() Tipe()
chr () frozenset () daftar() jarak() vars ()
classmethod () getattr () penduduk setempat () repr () zip()
menyusun() global () peta() dibalik () __impor__()
kompleks() hasattr () maks () bulat()
delattr () hash () memoryview () set()

Bagian ini membahas beberapa fungsi penting secara singkat -

fungsi len ()

Fungsi len () mendapatkan panjang string, daftar, atau koleksi. Ini mengembalikan panjang atau jumlah item suatu objek, di mana objek dapat berupa string, daftar, atau koleksi.

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

fungsi len () secara internal bekerja seperti list.__len__() atau tuple.__len__(). Jadi, perhatikan bahwa len () hanya berfungsi pada objek yang memiliki __len__() metode.

>>> set1
{1, 2, 3, 4}
>>> set1.__len__()
4

Namun, dalam praktiknya, kami lebih suka len() alih-alih __len__() berfungsi karena alasan berikut -

  • Ini lebih efisien. Dan tidak perlu ada metode tertentu yang ditulis untuk menolak akses ke metode khusus seperti __len__.

  • Mudah dirawat.

  • Ini mendukung kompatibilitas ke belakang.

Terbalik (seq)

Ini mengembalikan iterator terbalik. seq harus berupa objek yang memiliki metode __reversed __ () atau mendukung protokol urutan (metode __len __ () dan metode __getitem __ ()). Ini umumnya digunakan dalamfor loop ketika kita ingin mengulang item dari belakang ke depan.

>>> 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=", ")

Perulangan for di akhir mencetak daftar terbalik dari daftar normal, dan contoh dari dua urutan kustom. Outputnya menunjukkan itureversed() bekerja pada ketiganya, tetapi memiliki hasil yang sangat berbeda saat kita tentukan __reversed__.

Keluaran

Anda dapat mengamati keluaran berikut ketika Anda menjalankan kode yang diberikan di atas -

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

Menghitung

Itu enumerate () metode menambahkan penghitung ke iterable dan mengembalikan objek enumerate.

Sintaks dari enumerate () adalah -

enumerate(iterable, start = 0)

Di sini argumen kedua start bersifat opsional, dan secara default indeks dimulai dengan nol (0).

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

Begitu enumerate()mengembalikan sebuah iterator yang menghasilkan tupel yang menghitung jumlah elemen dalam urutan yang dilewati. Karena nilai yang dikembalikan adalah iterator, mengaksesnya secara langsung tidak banyak berguna. Pendekatan yang lebih baik untuk enumerate () adalah menjaga hitungan dalam loop 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

Ada banyak fungsi lain di pustaka standar, dan berikut adalah daftar lain dari beberapa fungsi yang lebih banyak digunakan -

  • hasattr, getattr, setattr dan delattr, yang memungkinkan atribut suatu objek dimanipulasi dengan nama stringnya.

  • all dan any, yang menerima objek iterable dan kembali True jika semua, atau salah satu, dari item dievaluasi sebagai benar.

  • nzip, yang mengambil dua atau lebih urutan dan mengembalikan urutan tupel baru, di mana setiap tupel berisi satu nilai dari setiap urutan.

File I / O

Konsep file dikaitkan dengan istilah pemrograman berorientasi objek. Python telah membungkus antarmuka yang disediakan sistem operasi dalam abstraksi yang memungkinkan kita untuk bekerja dengan objek file.

Itu open()fungsi built-in digunakan untuk membuka file dan mengembalikan objek file. Ini adalah fungsi yang paling umum digunakan dengan dua argumen -

open(filename, mode)

Fungsi open () memanggil dua argumen, pertama adalah nama file dan kedua adalah mode. Di sini mode dapat berupa 'r' untuk mode read only, 'w' untuk hanya menulis (file yang ada dengan nama yang sama akan dihapus), dan 'a' membuka file untuk ditambahkan, setiap data yang ditulis ke file secara otomatis ditambahkan sampai akhir. 'r +' membuka file untuk membaca dan menulis. Mode default hanya baca.

Di windows, 'b' ditambahkan ke mode membuka file dalam mode biner, jadi ada juga mode seperti 'rb', 'wb' dan 'r + b'.

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

Dalam beberapa kasus, kami hanya ingin menambahkan ke file yang sudah ada daripada menimpanya, untuk itu kami dapat memberikan nilai 'a' sebagai argumen mode, untuk ditambahkan ke akhir file, daripada sepenuhnya menimpa file yang ada isi.

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

Setelah file dibuka untuk dibaca, kita dapat memanggil metode read, readline, atau readlines untuk mendapatkan konten file. Metode read mengembalikan seluruh konten file sebagai objek str atau byte, bergantung pada apakah argumen kedua adalah 'b'.

Untuk keterbacaan, dan untuk menghindari membaca file besar sekaligus, seringkali lebih baik menggunakan loop for langsung pada objek file. Untuk file teks, itu akan membaca setiap baris, satu per satu, dan kita dapat memprosesnya di dalam badan perulangan. Namun untuk file biner, lebih baik membaca potongan data berukuran tetap menggunakan metode read (), dengan meneruskan parameter untuk jumlah byte maksimum untuk dibaca.

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

Menulis ke file, melalui metode tulis pada objek file akan menulis objek string (byte untuk data biner) ke file. Metode garis tulis menerima urutan string dan menulis setiap nilai yang diiterasi ke file. Metode garis tulis tidak menambahkan baris baru setelah setiap item dalam urutan.

Akhirnya metode close () harus dipanggil ketika kita selesai membaca atau menulis file, untuk memastikan penulisan buffer apa pun ditulis ke disk, bahwa file telah dibersihkan dengan benar dan bahwa semua sumber daya yang terkait dengan file dilepaskan kembali ke sistem operasi. Ini adalah pendekatan yang lebih baik untuk memanggil metode close () tetapi secara teknis ini akan terjadi secara otomatis ketika skrip ada.

Sebuah alternatif untuk metode overloading

Metode overloading mengacu pada memiliki beberapa metode dengan nama yang sama yang menerima kumpulan argumen berbeda.

Diberikan metode atau fungsi tunggal, kita dapat menentukan sendiri jumlah parameternya. Bergantung pada definisi fungsi, itu bisa dipanggil dengan nol, satu, dua atau lebih parameter.

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')

Keluaran

Hello
Hello Rahul

Argumen Default

Fungsi Juga Objek

Objek yang dapat dipanggil adalah objek yang dapat menerima beberapa argumen dan kemungkinan akan mengembalikan objek. Fungsi adalah objek yang dapat dipanggil paling sederhana di Python, tetapi ada juga yang lain seperti kelas atau instance kelas tertentu.

Setiap fungsi dalam Python adalah sebuah objek. Objek dapat berisi metode atau fungsi tetapi objek tidak memerlukan fungsi.

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)

Pada kode di atas, kita dapat melewatkan dua fungsi berbeda sebagai argumen ke fungsi ketiga kita, dan mendapatkan Output yang berbeda untuk masing-masing -

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 
       
      

callable objects

Just as functions are objects that can have attributes set on them, it is possible to create an object that can be called as though it were a function.

In Python any object with a __call__() method can be called using function-call syntax.