Sempurnakan perilaku kelas Anda dengan mekanisme penggantian fleksibel Python.
Di Python, kelas menyediakan cara yang bersih untuk menggabungkan data dan fungsionalitas menjadi elemen yang dapat digunakan kembali. Membuat kelas khusus memungkinkan Anda membuat model entitas dunia nyata seperti pengguna, produk, dan karyawan.
Kelas Python menentukan metode ajaib yang dapat Anda sesuaikan untuk memungkinkan Anda membentuk perilaku kelas Anda untuk situasi unik.
Memahami Metode Ajaib
Bayangkan metode ajaib, juga disebut metode dunder, sebagai mantra rahasia atau nyanyian tersembunyi yang dipanggil secara otomatis oleh Python saat Anda melakukan tindakan tertentu pada suatu objek.
Python menyediakan banyak perilaku bawaan untuk kelas-kelas metode instance, statis, dan kelas. Kamu bisa membuat kelas Python, dan sesuaikan lebih jauh lagi menggunakan metode ajaib.
Metode ajaib adalah metode instan dalam Python yang memiliki dua garis bawah (__metode__) sebelum dan sesudah nama metode.
Metode khusus ini memberikan instruksi kepada Python tentang cara menangani objek suatu kelas. Berikut beberapa metode ajaib yang umum digunakan di kelas Python:
- __gt__: Metode ini memeriksa apakah satu objek lebih besar dari yang lain.
- __init__: Metode ini berjalan saat Anda membuat instance kelas, dan ini terutama untuk inisialisasi atribut.
- __str__: Ini mengembalikan representasi string dari kelas yang mendeskripsikan objek.
- __repr__: Metode ini memberikan keluaran yang memungkinkan Anda membuat ulang objek menggunakan evaluasi().
- __len__: Saat Anda menggunakan Len() berfungsi pada suatu objek metode ini mengembalikan panjang objek.
- __persamaan__: Metode ini memungkinkan perbandingan antar objek menggunakan tanda ganda yang sama dengan (==) operator.
- __lt__: Ini mengimplementasikan perbandingan kurang dari (
- __menambahkan__: Saat Anda menggunakan penambahan (+) operator pada objek yang dijalankan metode ini dan melakukan operasi penambahan.
- __dapatkan barang__: Memungkinkan Anda mengambil item dari suatu objek menggunakan sintaks indeks, seperti objek[kunci].
Menerapkan Metode Ajaib
Cara terbaik untuk memahami metode ajaib adalah dengan menggunakannya.
Representasi String dari suatu Objek
Anda dapat menyesuaikan representasi string suatu objek agar mudah dibaca atau diproses lebih lanjut.
classPerson:
def__init__(self, name, age):
self.name = name
self.age = age
p1 = Person('John', 25)
print(p1)
Ini dia yang sederhana Orang kelas dengan __init__ metode ajaib untuk menginisialisasinya. Saat Anda mencetak hal1 objek, ia menggunakan representasi string default yang disediakan oleh Python.
Untuk menyesuaikan representasi string, tentukan __str__ Dan __repr__ metode ajaib:
classPerson:
def__init__(self, name, age, height):
self.name = name
self.age = age
self.height = heightdef__str__(self):
returnf'{self.name} is {self.age} years old'def__repr__(self):
returnf'{self.name} is {self.age} years old'
p1 = Person('John', 25, 78)
print(p1)
Sekarang Anda memiliki representasi string yang lebih mudah dibaca dan komprehensif hal1 obyek:
Properti Panjang suatu Objek
Bayangkan, saat Anda menelepon Len() metode objek Person, Anda ingin tingginya. Menerapkan __len__ metode ajaib untuk Orang kelas:
classPerson:
def__init__(self, name, age, height):
self.name = name
self.age = age
self.height = heightdef__str__(self):
returnf'{self.name} is {self.age} years old'def__repr__(self):
returnf'{self.name} is {self.age} years old'def__len__(self):
return self.height
p2 = Person('Issac', 25, 89)
print(len(p2))
Itu __len__ metode ajaib mengembalikan atribut ketinggian a Orang contoh. Saat Anda menelepon len (p2), itu akan memanggil __len__ metode ajaib secara otomatis yang mengembalikan ketinggian hal2 obyek.
Menangani Perbandingan Antar Objek
Jika Anda perlu membandingkan objek suatu kelas berdasarkan properti tertentu dari kelas tersebut. Anda dapat menentukan __persamaan__ metode ajaib dan terapkan logika perbandingan Anda.
classPerson:
def__init__(self, name, age, height):
self.name = name
self.age = age
self.height = heightdef__str__(self):
returnf'{self.name} is {self.age} years old'def__repr__(self):
returnf'{self.name} is {self.age} years old'def__len__(self):
return self.heightdef__eq__(self, other):
return self.name == other.name and self.age == other.agep1 = Person('John', 25, 56)
p2 = Person('John', 25, 61)
print(p1 == p2)
Itu __persamaan__ metode membandingkan nama Dan usia atribut keduanya milik orang objek untuk menentukan kesetaraan.
Gandanya sama dengan (==) operator menggunakan metode ini untuk memeriksa kesetaraan daripada membandingkan identitas. Jadi dua Orang instance dianggap sama jika memiliki atribut nama dan usia yang cocok. Hal ini memungkinkan Anda untuk mengganti perilaku pemeriksaan kesetaraan default untuk kelas khusus Anda.
Dengan menerapkan metode ajaib ini, Anda dapat menentukan perilaku khusus yang akan konsisten dengan bawaan Python.
Metode Sihir Tingkat Lanjut
Berikut adalah beberapa contoh lanjutan penggunaan metode ajaib untuk menyesuaikan kelas.
Membuat Kelas Bertindak Seperti Wadah
Dengan menggunakan metode ajaib, Anda dapat mendefinisikan kelas yang berperilaku seperti container. Anda dapat gunakan wadah, seperti tupel, untuk menyimpan kumpulan elemen data. Mereka menyediakan berbagai metode untuk memanipulasi, mengakses, dan mengulangi elemen yang terkandung.
classPerson:
def__init__(self):
self.data = []def__len__(self):
return len(self.data)def__getitem__(self, index):
return self.data[index]def__setitem__(self, index, value):
self.data[index] = valuedef__delitem__(self, index):
del self.data[index]p1 = Person()
p1.data = [10, 2, 7]
print(len(p1)) # 3
p1[0] = 5
print(p1[0]) # 5
Sekarang objek Person dapat berperilaku seperti sebuah wadah:
Menyesuaikan Akses Atribut
Menggunakan __getattr__ metode ajaib Anda dapat menyesuaikan atribut cara Orang kelas sedang diakses berdasarkan kondisi tertentu.
classPerson:
def__getattr__(self, name):
if name == 'age':
return40
else:
raise AttributeError(f'No attribute {name}')
p1 = Person()
print(p1.age) # 40
Itu __getattr__ Metode ini akan berjalan ketika Anda mencoba mengakses atribut yang tidak ada secara langsung di objek. Dalam hal ini, ia memeriksa apakah nama atributnya benar usia dan mengembalikan 40.
Untuk nama atribut lainnya, ini memunculkan Kesalahan Atribut dengan pesan yang sesuai.
Membuat Kelas Berperilaku Seperti Callable
Itu __panggilan__ Metode ini memungkinkan Anda memperlakukan instance kelas sebagai objek yang dapat dipanggil (yaitu fungsi).
classAdder:
def__call__(self, x, y):
return x + y
adder = Adder()
print(adder(2, 3)) # 5
Saat Anda membuat sebuah instance dari Penambah dan kemudian menyebutnya dengan argumen, __panggilan__ metode berjalan dan melakukan penambahan sebelum mengembalikan hasilnya.
Kelebihan Operator
Dengan menggunakan metode ajaib, Anda dapat melakukan kelebihan operator. Kelebihan operator memungkinkan Anda menentukan perilaku khusus untuk operator bawaan saat digunakan dengan instance kelas Anda sendiri. Berikut adalah contoh umum yang menjelaskan kelebihan beban operator.
classVector:
def__init__(self, x, y):
self.x = x
self.y = ydef__add__(self, other):
if isinstance(other, Vector):
new_x = self.x + other.x
new_y = self.y + other.y
return Vector(new_x, new_y)
else:
raise TypeError("Unsupported operand type for +")def__str__(self):
returnf"({self.x}, {self.y})"# Creating two Vector instances
v1 = Vector(2, 3)
v2 = Vector(1, 4)# Adding two Vector instances using the + operator
v3 = v1 + v2
# Printing the result
print(v3) # Output: (3, 7)
Hasilnya adalah vektor baru:
Itu Vektor kelas mendefinisikan __menambahkan__ metode, yang dijalankan saat Anda menggunakan + operator antara dua instance kelas. Metode ini menambahkan komponen yang sesuai dari dua vektor dan mengembalikan yang baru Vektor contoh dengan hasilnya.
Di sini Anda telah melihat metode ajaib mendasar yang dapat Anda terapkan untuk menyesuaikan perilaku kelas Anda. Python memiliki lebih banyak metode ajaib yang menawarkan lebih banyak fleksibilitas saat membuat kelas. Mengacu kepada dokumentasi resmi untuk daftar lengkap.
Pemrograman Berorientasi Objek dengan Python
Metode ajaib di Python menyediakan cara ampuh untuk menyesuaikan dan meningkatkan perilaku kelas. Metode ajaib sejalan dengan konsep pemrograman berorientasi objek (OOP) dengan Python. Jadi penting untuk memahami konsep OOP ketika mencoba menggunakan metode ajaib.