Belajar Kaedah Sihir Python: Penjelasan Mudah
Aug 09, 2024 am 06:44 AMMemahami Kaedah Sihir dalam Python
Kaedah ajaib dalam Python, juga dikenali sebagai kaedah dunder (kerana ia mempunyai garis bawah berganda pada permulaan dan penghujung nama mereka), membolehkan kami mentakrifkan gelagat objek kami untuk pelbagai operasi. Mereka mendayakan gelagat tersuai dan boleh menjadikan kelas kami bertindak seperti jenis terbina dalam. Dalam blog ini, kami akan meneroka pelbagai kategori kaedah sihir, memberikan penjelasan terperinci dan memberikan contoh praktikal serta kes penggunaan.
1. Kaedah Akses Atribut
Kaedah ajaib ini mengawal cara atribut objek anda diakses, diubah suai atau dipadamkan.
__getattr__ dan __getattribute__
__getattr__: Dipanggil apabila atribut tidak ditemui dalam objek.
__getattribute__: Dipanggil tanpa syarat untuk mengakses sebarang atribut.
Contoh: Akses Atribut Tersuai dengan Pengelogan
class LoggedAttributes: def __init__(self, name): self.name = name def __getattr__(self, item): print(f"Accessing non-existent attribute: {item}") return None def __getattribute__(self, item): print(f"Getting attribute: {item}") return super().__getattribute__(item) # Usage obj = LoggedAttributes("Alice") print(obj.name) # Output: Getting attribute: name\nAlice print(obj.age) # Output: Accessing non-existent attribute: age\nNone
Kes Penggunaan Praktikal: Mengelog akses atribut dalam senario nyahpepijat untuk mengesan bila dan cara atribut diakses atau diubah suai.
__setattr__ dan __delattr__
__setattr__: Dipanggil apabila tugasan atribut dicuba.
__delattr__: Dipanggil apabila pemadaman atribut cuba dilakukan.
Contoh: Pengubahsuaian Atribut Tersuai dengan Pengesahan
class Person: def __init__(self, name, age): self.name = name self.age = age def __setattr__(self, key, value): if key == "age" and value < 0: raise ValueError("Age cannot be negative") super().__setattr__(key, value) def __delattr__(self, item): if item == "name": raise AttributeError("Can't delete attribute 'name'") super().__delattr__(item) # Usage p = Person("Alice", 30) p.age = 25 # Works fine # p.age = -1 # Raises ValueError # del p.name # Raises AttributeError
Kes Penggunaan Praktikal: Menguatkuasakan peraturan atau sekatan pengesahan apabila menetapkan atau memadamkan atribut.
2. Kaedah Bekas
Kaedah ajaib ini membolehkan objek anda berkelakuan seperti bekas (senarai, kamus, dll.).
__len__, __getitem__, __setitem__, __delitem__ dan __iter__
__len__: Mengembalikan panjang bekas.
__getitem__: Mendapatkan semula item pada indeks atau kunci tertentu.
__setitem__: Menetapkan item pada indeks atau kunci tertentu.
__delitem__: Memadamkan item pada indeks atau kunci tertentu.
__iter__: Mengembalikan objek lelaran.
Contoh: Objek seperti Senarai Tersuai
class CustomList: def __init__(self): self._items = [] def __len__(self): return len(self._items) def __getitem__(self, index): return self._items[index] def __setitem__(self, index, value): self._items[index] = value def __delitem__(self, index): del self._items[index] def __iter__(self): return iter(self._items) def append(self, item): self._items.append(item) # Usage cl = CustomList() cl.append(1) cl.append(2) cl.append(3) print(len(cl)) # Output: 3 print(cl[1]) # Output: 2 for item in cl: print(item) # Output: 1 2 3
Kes Penggunaan Praktikal: Mencipta kelas koleksi tersuai yang memerlukan tingkah laku khusus atau kaedah tambahan sambil masih menyokong operasi senarai standard.
3. Kaedah Numerik dan Perbandingan
Kaedah ini mentakrifkan cara objek kelas anda berinteraksi dengan operasi berangka dan perbandingan.
Kaedah Numerik
- __add__, __sub__, __mul__, __truediv__, __floordiv__, __mod__, __pow__: Takrifkan operasi aritmetik.
Contoh: Kelas Nombor Kompleks Tersuai
class Complex: def __init__(self, real, imag): self.real = real self.imag = imag def __add__(self, other): return Complex(self.real + other.real, self.imag + other.imag) def __sub__(self, other): return Complex(self.real - other.real, self.imag - other.imag) def __repr__(self): return f"({self.real} + {self.imag}i)" # Usage c1 = Complex(1, 2) c2 = Complex(3, 4) print(c1 + c2) # Output: (4 + 6i) print(c1 - c2) # Output: (-2 + -2i)
Kes Penggunaan Praktikal: Melaksanakan jenis angka tersuai seperti nombor kompleks, vektor atau matriks.
Kaedah Perbandingan
- __eq__, __ne__, __lt__, __le__, __gt__, __ge__: Tentukan operasi perbandingan.
Contoh: Melaksanakan Jumlah Pesanan untuk Kelas Tersuai
from functools import total_ordering @total_ordering class Book: def __init__(self, title, author): self.title = title self.author = author def __eq__(self, other): return (self.title, self.author) == (other.title, other.author) def __lt__(self, other): return (self.title, self.author) < (other.title, other.author) def __repr__(self): return f"{self.title} by {self.author}" # Usage book1 = Book("Title1", "Author1") book2 = Book("Title2", "Author2") books = [book2, book1] print(sorted(books)) # Output: [Title1 by Author1, Title2 by Author2]
Kes Penggunaan Praktikal: Mendayakan objek tersuai diisih atau dibandingkan, berguna dalam struktur data seperti timbunan, pepohon carian binari atau hanya semasa mengisih senarai objek tersuai.
4. Kaedah Bekas: Kes Penggunaan Praktikal
Kamus Tersuai dengan Kekunci Tidak Peka Huruf Besar
Mencipta objek seperti kamus yang menganggap kekunci sebagai tidak sensitif huruf besar.
Contoh: Kamus Case-Insensitive
class CaseInsensitiveDict: def __init__(self): self._data = {} def __getitem__(self, key): return self._data[key.lower()] def __setitem__(self, key, value): self._data[key.lower()] = value def __delitem__(self, key): del self._data[key.lower()] def __contains__(self, key): return key.lower() in self._data def keys(self): return self._data.keys() def items(self): return self._data.items() def values(self): return self._data.values() # Usage cid = CaseInsensitiveDict() cid["Name"] = "Alice" print(cid["name"]) # Output: Alice print("NAME" in cid) # Output: True
Kes Penggunaan Praktikal: Mencipta kamus yang mana kunci harus dianggap sebagai tidak sensitif huruf besar, berguna untuk mengendalikan input pengguna, tetapan konfigurasi, dsb.
Kesimpulan
Kaedah ajaib menyediakan cara yang berkuasa untuk menyesuaikan tingkah laku objek anda dalam Python. Memahami dan menggunakan kaedah ini dengan berkesan boleh menjadikan kelas anda lebih intuitif dan disepadukan dengan lancar dengan fungsi dan pengendali terbina dalam Python. Sama ada anda melaksanakan jenis berangka tersuai, bekas atau corak akses atribut, kaedah ajaib boleh meningkatkan kefleksibelan dan kefungsian kod anda dengan ketara
Atas ialah kandungan terperinci Belajar Kaedah Sihir Python: Penjelasan Mudah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Bagaimana saya menggunakan sup yang indah untuk menghuraikan html?

Cara Menggunakan Python untuk Mencari Pengagihan Zipf Fail Teks

Cara Bekerja Dengan Dokumen PDF Menggunakan Python

Cara Cache Menggunakan Redis dalam Aplikasi Django

Bagaimana untuk melakukan pembelajaran mendalam dengan Tensorflow atau Pytorch?

Memperkenalkan Toolkit Bahasa Alam (NLTK)
