Parameter Show
Itu tidak harus diberi nama Jika Anda telah memprogram dengan Python (pemrograman berorientasi objek) selama beberapa waktu, maka Anda pasti menemukan metode yang memiliki 3 sebagai parameter pertama merekaMari kita coba memahami apa parameter diri yang berulang ini Apa itu diri dalam Python?Dalam pemrograman berorientasi objek, setiap kali kita mendefinisikan metode untuk kelas, kita menggunakan 3 sebagai parameter pertama dalam setiap kasus. Mari kita lihat definisi kelas yang disebut 5
Dalam hal ini semua metode, termasuk _6, memiliki parameter pertama sebagai 3Kita tahu bahwa kelas adalah cetak biru untuk objek. Cetak biru ini dapat digunakan untuk membuat banyak objek. Mari buat dua objek berbeda dari kelas di atas
Kata kunci 3 digunakan untuk mewakili instance (objek) dari kelas yang diberikan. Dalam hal ini, dua objek 5 0 dan 1 memiliki atribut 2 dan 3 sendiri. Jika tidak ada argumen mandiri, kelas yang sama tidak dapat menyimpan informasi untuk kedua objek iniNamun, karena kelas hanyalah cetak biru, 3 mengizinkan akses ke atribut dan metode setiap objek dengan python. Ini memungkinkan setiap objek memiliki atribut dan metodenya sendiri. Jadi, bahkan jauh sebelum membuat objek ini, kita mereferensikan objek sebagai 3 saat mendefinisikan kelasMengapa diri didefinisikan secara eksplisit setiap saat?Bahkan ketika kita memahami penggunaan 3, mungkin masih tampak aneh, terutama bagi pemrogram yang berasal dari bahasa lain, bahwa 3 diteruskan sebagai parameter secara eksplisit setiap kali kita mendefinisikan metode. Seperti yang dikatakan The Zen of Python, "Eksplisit lebih baik daripada implisit"Jadi, mengapa kita perlu melakukan ini? . Kami memiliki kelas _8 yang mendefinisikan metode 9 untuk menghitung jarak dari titik asal _Sekarang mari kita buat instance kelas ini dan temukan jaraknya
Dalam contoh di atas, _0 mendefinisikan tiga parameter tetapi kami hanya melewati dua (6 dan 8). Demikian pula 1 membutuhkan satu tetapi tidak ada argumen yang diberikan. Mengapa Python tidak mengeluh tentang ketidakcocokan nomor argumen ini?Apa yang Terjadi Secara Internal? 2 dan 3 pada contoh di atas berbeda dan tidak persis sama
Kita dapat melihat bahwa yang pertama adalah sebuah fungsi dan yang kedua adalah sebuah metode. Suatu hal yang aneh tentang metode (dalam Python) adalah objek itu sendiri diteruskan sebagai argumen pertama ke fungsi yang sesuai Dalam kasus contoh di atas, pemanggilan metode 4 sebenarnya setara dengan 5Umumnya, ketika kita memanggil sebuah metode dengan beberapa argumen, fungsi kelas terkait dipanggil dengan menempatkan objek metode sebelum argumen pertama. Jadi, sesuatu seperti _6 menjadi 7. Proses pemanggilan otomatis sedangkan proses penerimaan tidak (eksplisit)Ini adalah alasan mengapa parameter pertama dari sebuah fungsi di kelas haruslah objek itu sendiri. Menulis parameter ini sebagai _3 hanyalah sebuah konvensi. Ini bukan kata kunci dan tidak memiliki arti khusus di Python. Kita bisa menggunakan nama lain (seperti 9) tetapi sangat tidak dianjurkan. Menggunakan nama selain _3 tidak disukai oleh sebagian besar pengembang dan menurunkan keterbacaan kode (Jumlah keterbacaan)Diri Bisa DihindariSekarang Anda sudah jelas bahwa objek (instance) itu sendiri diteruskan sebagai argumen pertama, secara otomatis. Perilaku implisit ini dapat dihindari saat membuat metode statis. Perhatikan contoh sederhana berikut
Di sini, 1 adalah dekorator fungsi yang membuat 2 statis. Mari kita buat instance kelas ini dan panggil metodenya
Dari contoh di atas, kita dapat melihat bahwa perilaku implisit meneruskan objek sebagai argumen pertama dihindari saat menggunakan metode statis. Secara keseluruhan, metode statis berperilaku seperti fungsi lama biasa (Karena semua objek kelas berbagi metode statis)
Diri Ada Di Sini Untuk Tetap 3 eksplisit tidak unik untuk Python. Ide ini dipinjam dari Modula-3. Berikut ini adalah kasus penggunaan yang bergunaTidak ada deklarasi variabel eksplisit di Python. Mereka beraksi pada tugas pertama. Penggunaan _3 membuatnya lebih mudah untuk membedakan antara atribut instance (dan metode) dari variabel lokalPada contoh pertama, diri. x adalah atribut instance sedangkan x adalah variabel lokal. Mereka tidak sama dan terletak di ruang nama yang berbeda Banyak yang telah mengusulkan untuk menjadikan diri sebagai kata kunci dalam Python, seperti 5 dalam C++ dan Java. Ini akan menghilangkan penggunaan berlebihan 3 eksplisit dari daftar parameter formal dalam metodeMeskipun ide ini tampak menjanjikan, itu tidak akan terjadi. Setidaknya tidak dalam waktu dekat. Alasan utamanya adalah kompatibilitas ke belakang. Ini adalah blog dari pencipta Python sendiri yang menjelaskan mengapa diri yang eksplisit harus tetap ada __init__() bukan konstruktorSatu kesimpulan penting yang dapat ditarik dari informasi sejauh ini adalah bahwa metode 0 bukanlah sebuah konstruktor. Banyak programmer Python yang naif menjadi bingung karena 0 dipanggil saat kita membuat objekPemeriksaan lebih dekat akan mengungkapkan bahwa parameter pertama di 0 adalah objek itu sendiri (objek sudah ada). Fungsi _0 dipanggil segera setelah objek dibuat dan digunakan untuk menginisialisasinyaSecara teknis, konstruktor adalah metode yang membuat objek itu sendiri. Dalam Python, metode ini adalah 1. Tanda tangan umum dari metode ini adalah
Ketika _1 dipanggil, kelas itu sendiri dilewatkan sebagai argumen pertama secara otomatis( 3)Sekali lagi, seperti diri sendiri, cls hanyalah konvensi penamaan. Selain itu, *args dan **kwargs digunakan untuk mengambil sejumlah argumen selama pemanggilan metode dengan Python Beberapa hal penting yang perlu diingat saat menerapkan 1 adalah
Mari kita lihat sebuah contoh
Sekarang, mari kita instantiate itu 0Contoh ini menggambarkan bahwa _1 dipanggil sebelum 0. Kita juga dapat melihat bahwa parameter cls di 1 adalah kelas itu sendiri ( 8). Terakhir, objek dibuat dengan memanggil metode 1 pada kelas dasar objekDalam Python, 3 adalah kelas dasar dari mana semua kelas lainnya diturunkan. Dalam contoh di atas, kami melakukannya dengan menggunakan super()Gunakan __new__ atau __init__?Anda mungkin sering melihat 0 tetapi penggunaan 1 jarang terjadi. Ini karena sebagian besar waktu Anda tidak perlu menimpanya. Umumnya, _0 digunakan untuk menginisialisasi objek yang baru dibuat sementara 1 digunakan untuk mengontrol cara objek dibuatKita juga dapat menggunakan _1 untuk menginisialisasi atribut suatu objek, tetapi secara logis itu harus ada di dalam 0Salah satu penggunaan praktis dari 1, bagaimanapun, bisa untuk membatasi jumlah objek yang dibuat dari kelasMisalkan kita menginginkan kelas 1 untuk membuat instance untuk mewakili empat simpul persegi. Kami dapat mewarisi dari kelas kami sebelumnya 8 (contoh kedua dalam artikel ini) dan menggunakan 1 untuk menerapkan pembatasan ini. Berikut adalah contoh untuk membatasi kelas agar hanya memiliki empat instance
Bisakah saya menggunakan metode self in class Python?Dengan menggunakan "self" kita dapat mengakses atribut dan metode kelas di python . Itu mengikat atribut dengan argumen yang diberikan.
Bisakah Anda memanggil metode kelas sendiri?Metode instance membutuhkan instance kelas dan dapat mengakses instance melalui self . Metode kelas tidak memerlukan instance kelas. Mereka tidak dapat mengakses instance ( self ) tetapi mereka memiliki akses ke class itu sendiri melalui cls. Metode statis tidak memiliki akses ke cls atau self.
Apakah saya perlu menganggap diri sebagai argumen Python?Python tidak memaksa Anda untuk menggunakan "self" . Anda dapat memberikannya nama apa pun yang Anda inginkan. Anda hanya perlu mengingat bahwa argumen pertama dalam header definisi metode adalah referensi ke objek.
Apa artinya melewati diri sendiri dengan Python?Parameter self adalah referensi ke instance kelas saat ini, dan digunakan untuk mengakses variabel milik kelas . |