Jadual Kandungan
​Apakah kaedah ajaib?
Kaedah sihir yang biasa digunakan
1 Pembinaan dan permulaan
2. Kawal sihir seperti akses atribut Kaedah
3. Operasi kelas kontena
Ringkasan
Rumah pembangunan bahagian belakang Tutorial Python Mari kita bercakap tentang kaedah sihir biasa dalam Python

Mari kita bercakap tentang kaedah sihir biasa dalam Python

May 15, 2023 pm 10:34 PM
python kod kaedah sihir

​Apakah kaedah ajaib?

Kaedah Ajaib ialah fungsi terbina dalam Python, biasanya bermula dan berakhir dengan garis bawah berganda, seperti __init__, __del__, dsb. Ia dipanggil kaedah sihir kerana ia dipanggil secara automatik apabila melakukan operasi tertentu.

Dalam Python, anda boleh menggunakan kaedah dir() untuk melihat semua kaedah dan atribut objek yang bermula dan berakhir dengan garis bawah berganda ialah kaedah ajaib objek. Ambil objek rentetan sebagai contoh:

>>> dir("hello")
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',
'__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mo
d__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__',
'__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center',
'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'isl
ower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', '
rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate'
, 'upper', 'zfill']
Salin selepas log masuk

Anda boleh melihat bahawa objek rentetan mempunyai kaedah __add__, jadi anda boleh terus menggunakan operasi "+" pada objek rentetan dalam Python Apabila Python mengenali "+ " operasi , kaedah __add__ objek akan dipanggil. Apabila perlu, kita boleh mengatasi kaedah __add__ dalam kelas kita sendiri untuk mencapai kesan yang diingini.

class A(object):
def __init__(self, str):
self.str = str


• def __add__(self, other):
• print ('overwrite add method')
• return self.str + "---" + other.str


>>>a1 = A("hello")
>>>a2 = A("world")
>>>print (a1 + a2)
>>>overwrite add method
>>>"hello---world"
Salin selepas log masuk

Kami telah menulis semula kaedah __add__ Apabila Python mengenali operasi "+", ia secara automatik akan memanggil kaedah __add__ yang ditulis semula. Seperti yang anda lihat, kaedah ajaib akan dilaksanakan secara automatik selepas peristiwa tertentu dalam kelas atau objek dicetuskan. Jika anda ingin menyesuaikan kelas dengan fungsi khas mengikut program anda sendiri, anda perlu menulis semula kaedah ini. Menggunakan kaedah ajaib, kami boleh menambah fungsi khas pada kelas dengan sangat mudah.

Kaedah sihir yang biasa digunakan

1 Pembinaan dan permulaan

__baru__, __init__ Kedua-dua kaedah ajaib ini sering digunakan untuk memulakan kelas. Apabila kami mencipta a1 = A("hello") di atas, perkara pertama yang kami panggil ialah __new__; memulakan kelas dibahagikan kepada dua langkah:

  • a objek Instance kelas
  • b Panggil kaedah init kelas ini untuk memulakan objek instance

__new__(cls, *args, **kwargs) memerlukan sekurang-kurangnya satu parameter cls. , yang mewakili Kelas lulus. Dua parameter terakhir dihantar ke __init__. Dalam __new__, anda boleh memutuskan sama ada untuk meneruskan memanggil kaedah __init__ Hanya apabila __new__ mengembalikan contoh kelas semasa, __init__ akan dipanggil seterusnya. Digabungkan dengan ciri-ciri kaedah __new__, kita boleh melaksanakan mod tunggal Python dengan mengatasi kaedah __new__:

class Singleton(object):
def __init__(self):
print("__init__")

• def __new__(cls, *args, **kwargs):
• print("__new__")
• if not hasattr(Singleton, "_instance"):
• print("创建新实例")
• Singleton._instance = object.__new__(cls)
• return Singleton._instance

>>> obj1 = Singleton()
>>> __new__
>>> 创建新实例
>>> __init__
>>> obj2 = Singleton()
>>> __new__
>>> __init__
>>> print(obj1, obj2)
>>> (<__main__.Singleton object at 0x0000000003599748>, <__main__.Singleton object at 0x0000000003599748>)
Salin selepas log masuk

Anda boleh melihat bahawa walaupun dua objek dicipta, dua Alamat objek adalah sama.

2. Kawal sihir seperti akses atribut Kaedah

terutamanya berfungsi apabila mengakses, mentakrifkan dan mengubah suai sifat objek. Yang utama ialah:

  • __getattr__(diri, nama): Tentukan gelagat apabila pengguna cuba mendapatkan atribut.
  • __getattribute__(self, name): Tentukan gelagat apabila atribut kelas ini diakses (panggil kaedah ini dahulu untuk melihat sama ada atribut itu wujud, jika tidak, kemudian panggil getattr).
  • __setattr__(diri, nama, nilai): Mentakrifkan tingkah laku apabila atribut ditetapkan.

Kaedah ajaib self.__setattr__(nama, nilai) dipanggil apabila memulakan atribut seperti self.a=a atau mengubah suai atribut ins.a=1 apabila tika itu mengakses The intipati atribut seperti ins.a ialah memanggil kaedah ajaib a.__getattr__(nama)

3. Operasi kelas kontena

Terdapat beberapa kaedah yang membolehkan kita menentukan bekas kita sendiri, sama seperti Senarai terbina dalam Python, Tuple, Dict, dll.; bekas dibahagikan kepada bekas boleh ubah dan bekas tidak boleh diubah

Jika anda memperibadikan bekas tidak berubah, anda hanya boleh menentukan __len__ dan __getitem__ untuk menentukan bekas boleh berubah, sebagai tambahan kepada semua kaedah ajaib bekas tidak berubah, anda juga perlu menentukan __setitem__ dan __delitem__ jika Bekas boleh lelaran. Anda juga perlu mentakrifkan __iter__.

  • __len__(self): Mengembalikan panjang bekas
  • __getitem__(self,key): Apabila anda perlu melaksanakan self[key] untuk memanggil objek dalam bekas, panggilannya ialah Kaedah ini __setitem__(self,key,value): Apabila anda perlu melaksanakan self[key] = value, kaedah ini dipanggil
  • __iter__(self): Apabila bekas boleh melaksanakan untuk x dalam bekas :, atau gunakan iter (bekas), anda perlu mentakrifkan kaedah ini

Berikut ialah contoh untuk melaksanakan bekas yang mempunyai fungsi umum Senarai, sambil menambah beberapa fungsi lain seperti mengakses yang pertama elemen, elemen elemen terakhir, rekod bilangan kali setiap elemen diakses, dsb.

class SpecialList(object):
def __init__(self, values=None):
self._index = 0
if values is None:
self.values = []
else:
self.values = values
self.count = {}.fromkeys(range(len(self.values)), 0)

def __len__(self):# 通过len(obj)访问容器长度
return len(self.values)

def __getitem__(self, key):# 通过obj[key]访问容器内的对象
self.count[key] += 1
return self.values[key]

def __setitem__(self, key, value):# 通过obj[key]=value去修改容器内的对象
self.values[key] = value

def __iter__(self):# 通过for 循环来遍历容器
return iter(self.values)

def __next__(self):
# 迭代的具体细节
# 如果__iter__返回时self 则必须实现此方法
if self._index >= len(self.values):
raise StopIteration()
value = self.values[self._index]
self._index += 1
return value

def append(self, value):
self.values.append(value)

def head(self):
# 获取第一个元素
return self.values[0]

def last(self):
# 获取最后一个元素
return self.values[-1]
Salin selepas log masuk

Senario penggunaan kaedah ini digunakan terutamanya apabila anda perlu menentukan struktur data kelas kontena yang memenuhi keperluan anda Sebagai contoh, anda boleh cuba menyesuaikan struktur data seperti pepohon struktur dan senarai terpaut (semua tersedia dalam koleksi), atau beberapa jenis kontena yang perlu disesuaikan dalam projek.

Ringkasan

Kaedah ajaib boleh memudahkan kod dalam kod Python dan meningkatkan kebolehbacaan kod Anda boleh melihat banyak aplikasi kaedah ajaib dalam perpustakaan pihak ketiga Python biasa. Oleh itu, artikel semasa ini hanyalah pengenalan penggunaan sebenar memerlukan pemahaman yang berterusan dan aplikasi yang sesuai dalam kod sumber terbuka yang sangat baik dan amalan kejuruteraan sendiri.

Atas ialah kandungan terperinci Mari kita bercakap tentang kaedah sihir biasa dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Python vs JavaScript: Komuniti, Perpustakaan, dan Sumber Python vs JavaScript: Komuniti, Perpustakaan, dan Sumber Apr 15, 2025 am 12:16 AM

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Cara menjalankan program di terminal vscode Cara menjalankan program di terminal vscode Apr 15, 2025 pm 06:42 PM

Dalam kod VS, anda boleh menjalankan program di terminal melalui langkah -langkah berikut: Sediakan kod dan buka terminal bersepadu untuk memastikan bahawa direktori kod selaras dengan direktori kerja terminal. Pilih arahan Run mengikut bahasa pengaturcaraan (seperti python python your_file_name.py) untuk memeriksa sama ada ia berjalan dengan jayanya dan menyelesaikan kesilapan. Gunakan debugger untuk meningkatkan kecekapan debug.

Bolehkah kod studio visual digunakan dalam python Bolehkah kod studio visual digunakan dalam python Apr 15, 2025 pm 08:18 PM

Kod VS boleh digunakan untuk menulis Python dan menyediakan banyak ciri yang menjadikannya alat yang ideal untuk membangunkan aplikasi python. Ia membolehkan pengguna untuk: memasang sambungan python untuk mendapatkan fungsi seperti penyempurnaan kod, penonjolan sintaks, dan debugging. Gunakan debugger untuk mengesan kod langkah demi langkah, cari dan selesaikan kesilapan. Mengintegrasikan Git untuk Kawalan Versi. Gunakan alat pemformatan kod untuk mengekalkan konsistensi kod. Gunakan alat linting untuk melihat masalah yang berpotensi lebih awal.

Adakah sambungan vscode berniat jahat? Adakah sambungan vscode berniat jahat? Apr 15, 2025 pm 07:57 PM

Sambungan kod VS menimbulkan risiko yang berniat jahat, seperti menyembunyikan kod jahat, mengeksploitasi kelemahan, dan melancap sebagai sambungan yang sah. Kaedah untuk mengenal pasti sambungan yang berniat jahat termasuk: memeriksa penerbit, membaca komen, memeriksa kod, dan memasang dengan berhati -hati. Langkah -langkah keselamatan juga termasuk: kesedaran keselamatan, tabiat yang baik, kemas kini tetap dan perisian antivirus.

Boleh kod vs dijalankan di Windows 8 Boleh kod vs dijalankan di Windows 8 Apr 15, 2025 pm 07:24 PM

Kod VS boleh dijalankan pada Windows 8, tetapi pengalaman mungkin tidak hebat. Mula -mula pastikan sistem telah dikemas kini ke patch terkini, kemudian muat turun pakej pemasangan kod VS yang sepadan dengan seni bina sistem dan pasangnya seperti yang diminta. Selepas pemasangan, sedar bahawa beberapa sambungan mungkin tidak sesuai dengan Windows 8 dan perlu mencari sambungan alternatif atau menggunakan sistem Windows yang lebih baru dalam mesin maya. Pasang sambungan yang diperlukan untuk memeriksa sama ada ia berfungsi dengan betul. Walaupun kod VS boleh dilaksanakan pada Windows 8, disyorkan untuk menaik taraf ke sistem Windows yang lebih baru untuk pengalaman dan keselamatan pembangunan yang lebih baik.

Python: Automasi, skrip, dan pengurusan tugas Python: Automasi, skrip, dan pengurusan tugas Apr 16, 2025 am 12:14 AM

Python cemerlang dalam automasi, skrip, dan pengurusan tugas. 1) Automasi: Sandaran fail direalisasikan melalui perpustakaan standard seperti OS dan Shutil. 2) Penulisan Skrip: Gunakan Perpustakaan Psutil untuk memantau sumber sistem. 3) Pengurusan Tugas: Gunakan perpustakaan jadual untuk menjadualkan tugas. Kemudahan penggunaan Python dan sokongan perpustakaan yang kaya menjadikannya alat pilihan di kawasan ini.

Apa itu vscode untuk apa vscode? Apa itu vscode untuk apa vscode? Apr 15, 2025 pm 06:45 PM

VS Kod adalah nama penuh Visual Studio Code, yang merupakan editor kod dan persekitaran pembangunan yang dibangunkan oleh Microsoft. Ia menyokong pelbagai bahasa pengaturcaraan dan menyediakan penonjolan sintaks, penyiapan automatik kod, coretan kod dan arahan pintar untuk meningkatkan kecekapan pembangunan. Melalui ekosistem lanjutan yang kaya, pengguna boleh menambah sambungan kepada keperluan dan bahasa tertentu, seperti debuggers, alat pemformatan kod, dan integrasi Git. VS Kod juga termasuk debugger intuitif yang membantu dengan cepat mencari dan menyelesaikan pepijat dalam kod anda.

Bolehkah kod studio visual menjalankan python Bolehkah kod studio visual menjalankan python Apr 15, 2025 pm 08:00 PM

VS Kod bukan sahaja boleh menjalankan Python, tetapi juga menyediakan fungsi yang kuat, termasuk: mengenal pasti fail python secara automatik selepas memasang sambungan python, menyediakan penyelesaian kod, penonjolan sintaks, debugging dan fungsi lain. Bergantung pada persekitaran python yang dipasang, sambungan bertindak sebagai penyuntingan sambungan jambatan dan persekitaran python. Fungsi debugging termasuk menetapkan titik putus, debugging langkah demi langkah, melihat nilai berubah, dan meningkatkan kecekapan debugging. Terminal bersepadu menyokong arahan kompleks seperti ujian unit dan pengurusan pakej. Menyokong konfigurasi lanjutan dan meningkatkan ciri -ciri seperti pemformatan kod, analisis dan kawalan versi.

See all articles