Python

Tutorial Penerangan Python

Tutorial Penerangan Python
Teknik yang berguna untuk menulis kod generik yang dapat digunakan kembali di antara kelas disokong oleh deskriptor Python, atau lebih dikenal sebagai deskriptor. Mereka mungkin terdengar dekat dengan konsep warisan, tetapi tidak. Ini adalah teknik langsung untuk menangkap akses ke atribut dengan sifat yang mengikat. Deskriptor adalah fungsi asas Python yang mengatur banyak sihir, tersembunyi di bawah penutup bahasa. Sekiranya anda pernah merasakan bahawa deskriptor Python dengan sedikit pelaksanaan fungsional adalah subjek lanjutan, maka tutorial ini adalah platform utama untuk membuat anda memahami ciri hebat ini.

Kaedah Penerangan

Untuk menyatakannya dengan jelas, kelas yang melaksanakan __get_ (), __set () _, atau __hapus () _ fungsi protokol deskriptor untuk objek diklasifikasikan sebagai "Deskriptor". Untuk mengatur parameter pelbagai kelas yang menggunakan objek sebagai rujukan, deskriptor Python dibuat. Berikut adalah tiga kaedah yang ditentukan, yang akan digunakan dalam deskriptor:

__get __ (): Apabila anda cuba mengekstrak data, __get __ () atribut dipanggil, dan apa sahaja yang diberikannya adalah apa yang akan diberikan kepada kod yang menuntut nilai satu pemboleh ubah. Ia dikategorikan sebagai penerangan bukan data dan hanya boleh dibaca.

__set __ (): Fungsinya __set __ () dipanggil untuk menyesuaikan nilai parameter, dan tidak ada yang dikembalikan kepada anda oleh fungsi ini. Ia dikenali sebagai deskriptor data yang tidak hanya dapat dibaca tetapi juga boleh ditulis.

__hapus __ (): Setiap kali parameter dikeluarkan dari objek, maka __hapus __ () fungsi dipanggil. Ia dikenali sebagai deskriptor data yang tidak hanya boleh dibaca tetapi juga boleh ditulis.

Anda hanya perlu menegakkan protokol deskriptor jika anda menggunakan deskriptor Python dalam skrip anda. Fungsi protokol paling penting adalah dapatkan () dan tetapkan () mempunyai tandatangan seterusnya.

__get __ (self, obj, type = None) -> objek
__set __ (diri, obj, nilai) -> Tiada

diri adalah contoh penerangan.
obj adalah contoh objek yang dihubungkan dengan perihal anda.
menaip adalah jenis objek.

Contoh:

Di sini kita telah menentukan dua kelas. Di kelas Deskriptor, kami telah menentukan kaedah deskriptor. Di dalam dapatkan () kaedah, diri adalah contoh untuk deskriptor 'val', ia akan mendapat nilai 'Geeks' dan menyimpannya. Kemudian ia akan membuat rentetan dengan 'untuk' yang terpasang di antara atribut yang disediakan. Penerangan kelas (objek):

def __get __ (diri, obj, objtype):
kembali " untuk ".format (diri.val, diri.val)

Ia kemudian akan mengembalikan nilai ke kaedah set (). Fungsi ini kemudian memeriksa nilainya, sama ada rentetan atau tidak. Sekiranya nilainya berupa string, ia akan disimpan ke atribut bernama 'val'. Sekiranya nilainya bukan rentetan, ia akan membuang pengecualian.

def __set __ (diri, obj, val):
jika isinstance (val, str):
diri.val = val
lain:
naikkan TypeError ("Nama harus rentetan")

Selepas itu, nilainya akan dicetak sebagai rentetan 'GeeksforGeeks'.

kelas GFG (objek):
val = Penerangan ()
g = GFG ()
g.val = "Geeks"
mencetak (g.val)

Apabila anda cuba menjalankan kod ini, anda akan mendapat output berikut:

GeeksforGeeks

Tujuan Penerangan

Mari kita jelaskan kelas bernama 'rumah' dengan tiga ciri, iaitu: loc, area, dan harga. Anda mungkin menggunakan fungsi tersebut __di dalamnya__() untuk memulakan atribut kelas.

rumah kelas:

def __init __ (diri, lokasi, kawasan, harga):

Kemudian, anda boleh menggunakan fungsi __str __ (), yang dapat mengembalikan hasil dari tiga atribut yang mungkin anda lalui ke kelas semasa membuat item. Fungsi __str __ () akan mengembalikan rentetan.

Apabila anda melaksanakan kod ini, ia akan memaparkan output yang nampaknya betul.

Sekarang mari kita cuba mengubah harga rumah menjadi nilai negatif, seperti di bawah, dan melaksanakan kodnya.

Tidak ada perubahan sama sekali, kecuali tanda negatif, seperti yang ditunjukkan dalam output. Bertahan! Ada sesuatu di sini, bukan? Kenapa harga kediaman adalah negatif. Python membenarkannya kerana Python adalah persekitaran pembangunan serba boleh yang secara khusus tidak membenarkan pemeriksaan jenis.

Mari kita mulakan pernyataan 'if' di __di dalamnya__() berfungsi untuk meningkatkan pengecualian jika nilai atau harganya kurang dari sifar.

Mulai sekarang, anda mungkin melihatnya berkinerja baik, dan jika harganya kurang dari sifar, kod tersebut menghasilkan Ralat Nilai.

Seperti yang kita fahami, __di dalamnya_() fungsi adalah konstruktor, dan hanya dipanggil sekali semasa anda membuat objek kelas. Oleh itu, kemudian, pemeriksaan jenis disesuaikan akan gagal. Python menyediakan Penerangan yang pakar dalam membantu menyelesaikan semua masalah di atas. Sekarang, mari kita mula menggunakan deskriptor dalam contoh yang sama untuk memahaminya dengan baik.

Kelas Penerangan ' __di dalamnya_() fungsi mempunyai pemboleh ubah tempatan __price pada 0. Pada permulaannya, garis bawah dua menunjukkan bahawa parameter itu bersifat peribadi. Ia digunakan untuk membezakan parameter harga kelas Deskriptor dari kelas rumah.

The __get __ () kaedah akan mengembalikan harga. Contoh atribut mengandungi h1, yang merupakan contoh deskriptor. Pemilik atribut merujuk kepada nama kelas 'rumah' dan mengembalikan harganya.

Fungsinya __set __ () mempunyai atribut contoh yang mengandungi h1, dan nilai yang akan diberikan. Cek digunakan untuk mengesahkan nilainya. Sekiranya nilainya adalah bilangan bulat, ia akan dicetak, jika tidak, kod dengan membuang pengecualian Jenis Kesalahan. Sekiranya nilainya di bawah sifar, pengecualian Nilai Kesalahan akan dilemparkan ke dalam kod.

The __hapus __ () fungsi dijalankan ketika atribut parameter dikeluarkan dari objek.

Kelas rumah tetap sama, walaupun contohnya harga kelas Deskriptor () ditambah. Di dalam __di dalamnya_() fungsi, tambahkan atribut harga ke harga contoh, dan ia akan memanggil __set_ () fungsi.

Semasa menjalankan kod ini, ia akan memberi Anda Kesalahan Nilai kerana harganya tidak boleh menjadi sifar.

Sekarang cuba laksanakan kod dengan nilai rentetan.

Ini akan membuang pengecualian Jenis Kesalahan.

Nilai instance yang ada diganti pada pembentukan instance baru kerana deskriptor berkaitan dengan kelas dan bukan instance. Lihat di bawah:

Nilai pertama telah diganti dengan yang kedua.

Kesimpulannya

Kita dapat memahami mengapa perihal dari Python menjadi topik menarik dan jenis senario penggunaan yang boleh anda tambahkan dengan mengikuti tutorial ini.

OpenTTD vs Simutrans
Membuat simulasi pengangkutan anda sendiri boleh menyeronokkan, santai dan sangat menarik. Itulah sebabnya anda perlu memastikan bahawa anda mencuba s...
Tutorial OpenTTD
OpenTTD adalah salah satu permainan simulasi perniagaan yang paling popular di luar sana. Dalam permainan ini, anda perlu membuat perniagaan pengangku...
SuperTuxKart untuk Linux
SuperTuxKart adalah tajuk hebat yang direka untuk membawa anda pengalaman Mario Kart secara percuma pada sistem Linux anda. Ia cukup mencabar dan meny...