Jika Anda mengembangkan pemahaman intuitif untuk perbedaan mereka, Anda akan dapat menulis Python berorientasi objek yang mengomunikasikan maksudnya dengan lebih jelas dan akan lebih mudah dipertahankan dalam jangka panjang Show
Bonus Gratis. Klik di sini untuk mendapatkan akses ke Lembar Cheat OOP Python gratis yang mengarahkan Anda ke tutorial, video, dan buku terbaik untuk mempelajari lebih lanjut tentang Pemrograman Berorientasi Objek dengan Python Metode Instans, Kelas, dan Statis — Gambaran UmumMari kita mulai dengan menulis kelas (Python 3) yang berisi contoh sederhana untuk ketiga jenis metode tersebut
Hilangkan iklan Metode InstanceMetode pertama pada _9, disebut 0, adalah metode instance reguler. Itu adalah jenis metode dasar tanpa embel-embel yang akan sering Anda gunakan. Anda dapat melihat metode mengambil satu parameter, _1, yang menunjuk ke sebuah instance dari 9 ketika metode dipanggil (tapi tentu saja metode instance dapat menerima lebih dari satu parameter saja)Melalui parameter _1, metode instance dapat dengan bebas mengakses atribut dan metode lain pada objek yang sama. Ini memberi mereka banyak kekuatan ketika memodifikasi status objekTidak hanya mereka dapat mengubah status objek, metode instance juga dapat mengakses kelas itu sendiri melalui atribut 4. Ini berarti metode instance juga dapat mengubah status kelasMetode KelasMari kita bandingkan dengan metode kedua, 5. Saya menandai metode ini dengan dekorator untuk menandainya sebagai metode kelasAlih-alih menerima parameter _1, metode kelas mengambil parameter 8 yang menunjuk ke kelas—dan bukan instance objek—ketika metode dipanggilKarena metode kelas hanya memiliki akses ke argumen 8 ini, ia tidak dapat mengubah status instance objek. Itu akan membutuhkan akses ke _1. Namun, metode kelas masih bisa mengubah status kelas yang berlaku di semua instance kelasMetode StatisMetode ketiga, _1 ditandai dengan dekorator untuk menandainya sebagai metode statisJenis metode ini tidak menggunakan parameter _1 atau 8 (tapi tentu saja bebas menerima sejumlah parameter lain yang berubah-ubah)Oleh karena itu metode statis tidak dapat mengubah status objek atau status kelas. Metode statis dibatasi pada data apa yang dapat mereka akses - dan metode tersebut terutama merupakan cara untuk menamai metode Anda Mari Kita Lihat Mereka BeraksiSaya tahu diskusi ini cukup teoretis sampai saat ini. Dan saya yakin penting bagi Anda untuk mengembangkan pemahaman intuitif tentang perbedaan jenis metode ini dalam praktiknya. Kami akan membahas beberapa contoh konkret sekarang Mari kita lihat bagaimana metode ini beraksi saat kita memanggilnya. Kami akan mulai dengan membuat instance kelas dan kemudian memanggil tiga metode berbeda di dalamnya _9 diatur sedemikian rupa sehingga setiap implementasi metode mengembalikan tuple yang berisi informasi bagi kita untuk melacak apa yang terjadi — dan bagian mana dari kelas atau objek yang dapat diakses metode tersebutInilah yang terjadi ketika kita memanggil metode instan >>> _Ini menegaskan bahwa _0 (metode instance) memiliki akses ke instance objek (dicetak sebagai 7) melalui argumen 1Saat metode dipanggil, Python mengganti argumen 1 dengan objek instance, 0. Kita bisa mengabaikan gula sintaksis dari sintaks dot-call ( 1) dan meneruskan objek instance secara manual untuk mendapatkan hasil yang sama>>> _Dapatkah Anda menebak apa yang akan terjadi jika Anda mencoba memanggil metode tersebut tanpa membuat instance terlebih dahulu? Omong-omong, metode instance juga dapat mengakses kelas itu sendiri melalui atribut 4. Ini membuat metode instance kuat dalam hal pembatasan akses - mereka dapat memodifikasi status pada instance objek dan kelas itu sendiriMari kita coba metode kelas selanjutnya >>> _Memanggil _3 menunjukkan kepada kita bahwa ia tidak memiliki akses ke objek 7, tetapi hanya ke objek 5, yang mewakili kelas itu sendiri (segala sesuatu dalam Python adalah objek, bahkan kelas itu sendiri)Perhatikan bagaimana Python secara otomatis meneruskan kelas sebagai argumen pertama ke fungsi saat kita memanggil 6. Memanggil metode dalam Python melalui sintaks titik memicu perilaku ini. Parameter _1 pada metode instan bekerja dengan cara yang samaHarap dicatat bahwa penamaan parameter ini _1 dan 8 hanyalah sebuah konvensi. Anda dapat dengan mudah menamainya 0 dan 1 dan mendapatkan hasil yang sama. Yang penting adalah mereka diposisikan pertama dalam daftar parameter untuk metode iniSaatnya memanggil metode statis sekarang >>> _Apakah Anda melihat bagaimana kami memanggil _2 pada objek dan berhasil melakukannya? Di belakang layar, Python hanya memberlakukan pembatasan akses dengan tidak meneruskan argumen 1 atau 8 saat metode statis dipanggil menggunakan sintaks titikIni menegaskan bahwa metode statis tidak dapat mengakses status objek maupun status kelas. Mereka bekerja seperti fungsi biasa tetapi milik ruang nama kelas (dan setiap instance). Sekarang, mari kita lihat apa yang terjadi saat kita mencoba memanggil metode ini di kelas itu sendiri - tanpa membuat instance objek terlebih dahulu >>> _Kami dapat memanggil _3 dan 2 baik-baik saja, tetapi mencoba memanggil metode instance 7 gagal dengan 8Dan inilah yang diharapkan — kali ini kita tidak membuat instance objek dan mencoba memanggil fungsi instance secara langsung pada cetak biru kelas itu sendiri. Ini berarti tidak ada cara bagi Python untuk mengisi argumen 1 dan karenanya panggilan gagalIni seharusnya membuat perbedaan antara ketiga jenis metode ini sedikit lebih jelas. Tapi saya tidak akan berhenti di situ. Dalam dua bagian berikutnya saya akan membahas dua contoh yang sedikit lebih realistis tentang kapan menggunakan jenis metode khusus ini Saya akan mendasarkan contoh saya pada kelas 0 yang sederhana ini
>>> _Hilangkan iklan Pabrik Pizza Lezat Dengan >>> obj = MyClass() >>> obj.method() ('instance method called', <MyClass instance at 0x10205d190>) 5Jika Anda pernah mengenal pizza di dunia nyata, Anda akan tahu bahwa ada banyak variasi lezat yang tersedia
Orang Italia menemukan taksonomi pizza mereka berabad-abad yang lalu, jadi semua jenis pizza yang lezat ini memiliki nama mereka sendiri. Kami akan melakukannya dengan baik untuk mengambil keuntungan dari itu dan memberi pengguna kelas 0 kami antarmuka yang lebih baik untuk membuat objek pizza yang mereka dambakanCara yang bagus dan bersih untuk melakukannya adalah dengan menggunakan metode kelas sebagai fungsi pabrik untuk berbagai jenis pizza yang dapat kita buat _0Perhatikan bagaimana saya menggunakan argumen _8 di 5 dan 6 metode pabrik alih-alih memanggil konstruktor 0 secara langsungIni adalah trik yang dapat Anda gunakan untuk mengikuti prinsip Don't Repeat Yourself (DRY). Jika kami memutuskan untuk mengganti nama kelas ini di beberapa titik, kami tidak perlu mengingat memperbarui nama konstruktor di semua fungsi pabrik metode kelas Sekarang, apa yang bisa kita lakukan dengan metode pabrik ini? >>> 1Seperti yang Anda lihat, kita dapat menggunakan fungsi pabrik untuk membuat objek 0 baru yang dikonfigurasi seperti yang kita inginkan. Mereka semua menggunakan konstruktor _9 yang sama secara internal dan hanya menyediakan jalan pintas untuk mengingat semua berbagai bahanCara lain untuk melihat penggunaan metode kelas ini adalah bahwa mereka memungkinkan Anda untuk menentukan konstruktor alternatif untuk kelas Anda Python hanya mengizinkan satu metode _9 per kelas. Dengan menggunakan metode kelas, dimungkinkan untuk menambahkan konstruktor alternatif sebanyak yang diperlukan. Ini dapat membuat antarmuka untuk kelas Anda mendokumentasikan diri sendiri (hingga tingkat tertentu) dan menyederhanakan penggunaannyaKapan Menggunakan Metode StatisSedikit lebih sulit untuk memberikan contoh yang baik di sini. Tapi beri tahu Anda apa, saya akan terus meregangkan analogi pizza semakin tipis dan tipis… (yum. ) Inilah yang saya pikirkan _2Sekarang apa yang saya ubah di sini? Saya juga menambahkan metode instan 3 yang menghitung dan mengembalikan area pizza (ini juga akan menjadi kandidat yang baik untuk 4 — tapi hei, ini hanya contoh mainan)Alih-alih menghitung luas secara langsung dalam _3, menggunakan rumus luas lingkaran yang terkenal, saya memfaktorkannya ke metode statis 6 yang terpisahMari kita coba >>> 3Tentu, ini sedikit contoh sederhana, tetapi tidak apa-apa membantu menjelaskan beberapa manfaat yang diberikan metode statis Seperti yang telah kita pelajari, metode statis tidak dapat mengakses status kelas atau instance karena mereka tidak menggunakan argumen 8 atau 1. Itu adalah batasan yang besar — tetapi ini juga merupakan sinyal yang bagus untuk menunjukkan bahwa metode tertentu tidak bergantung pada hal lain di sekitarnyaDalam contoh di atas, jelas bahwa ________52______6 tidak dapat mengubah kelas atau turunan kelas dengan cara apa pun. (Tentu, Anda selalu bisa mengatasinya dengan variabel global tapi bukan itu intinya di sini. ) Sekarang, mengapa itu berguna? Menandai metode sebagai metode statis bukan hanya petunjuk bahwa metode tidak akan mengubah status kelas atau instance — pembatasan ini juga diberlakukan oleh runtime Python Teknik seperti itu memungkinkan Anda untuk berkomunikasi dengan jelas tentang bagian-bagian arsitektur kelas Anda sehingga pekerjaan pengembangan baru dipandu secara alami agar terjadi dalam batasan yang ditetapkan ini. Tentu saja, cukup mudah untuk menentang batasan ini. Namun dalam praktiknya mereka sering membantu menghindari modifikasi yang tidak disengaja yang bertentangan dengan desain aslinya Dengan kata lain, menggunakan metode statis dan metode kelas adalah cara untuk mengomunikasikan niat pengembang sambil menegakkan niat itu cukup untuk menghindari sebagian besar kesalahan kesalahan dan bug yang akan merusak desain Diterapkan dengan hemat dan ketika itu masuk akal, menulis beberapa metode Anda dengan cara itu dapat memberikan manfaat pemeliharaan dan memperkecil kemungkinan pengembang lain menggunakan kelas Anda secara tidak benar Metode statis juga bermanfaat dalam menulis kode pengujian Karena metode _6 benar-benar independen dari kelas lainnya, lebih mudah untuk mengujinyaKita tidak perlu khawatir tentang menyiapkan contoh kelas yang lengkap sebelum kita dapat menguji metode ini dalam pengujian unit. Kami hanya bisa menembak seperti kami akan menguji fungsi biasa. Sekali lagi, ini membuat perawatan di masa mendatang lebih mudah Takeaway kunci
Tandai sebagai Selesai Tonton Sekarang Tutorial ini memiliki kursus video terkait yang dibuat oleh tim Real Python. Tonton bersama dengan tutorial tertulis untuk memperdalam pemahaman Anda. Jenis Metode OOP dengan Python. @classmethod vs @staticmethod vs Metode Instance 🐍 Trik Python 💌 Dapatkan Trik Python singkat & manis yang dikirim ke kotak masuk Anda setiap beberapa hari. Tidak pernah ada spam. Berhenti berlangganan kapan saja. Dikuratori oleh tim Real Python Kirimi Saya Trik Python » Tentang Dan Bader Dan Bader adalah pemilik dan pemimpin redaksi Real Python dan pengembang utama realpython. platform pembelajaran com. Dan telah menulis kode selama lebih dari 20 tahun dan memegang gelar master dalam ilmu komputer » Lebih lanjut tentang DanSetiap tutorial di Real Python dibuat oleh tim pengembang sehingga memenuhi standar kualitas tinggi kami. Anggota tim yang mengerjakan tutorial ini adalah Aldren Master Keterampilan Python Dunia Nyata Dengan Akses Tanpa Batas ke Python Nyata Bergabunglah dengan kami dan dapatkan akses ke ribuan tutorial, kursus video langsung, dan komunitas pakar Pythonista Tingkatkan Keterampilan Python Anda » Guru Keterampilan Python Dunia Nyata Bergabunglah dengan kami dan dapatkan akses ke ribuan tutorial, kursus video langsung, dan komunitas ahli Pythonista Tingkatkan Keterampilan Python Anda » Bagaimana menurut anda? Nilai artikel ini Tweet Bagikan Bagikan EmailApa takeaway # 1 Anda atau hal favorit yang Anda pelajari? Kiat Berkomentar. Komentar yang paling berguna adalah yang ditulis dengan tujuan belajar dari atau membantu siswa lain. dan dapatkan jawaban atas pertanyaan umum di portal dukungan kami Mencari percakapan waktu nyata? . Selamat Pythoning Terus belajar Kategori Tutorial Terkait. python perantara Kursus Video yang Direkomendasikan. Jenis Metode OOP dengan Python. @classmethod vs @staticmethod vs Metode Instance Bagaimana Anda memanggil fungsi di kelas yang sama dengan Python?Metode instance adalah fungsi yang dibangun ke dalam definisi kelas dari suatu objek dan memerlukan instance dari kelas tersebut untuk dipanggil. Untuk memanggil metode, Anda perlu memenuhi fungsi dengan self . . Misalnya, di kelas yang berisi fungsi first() dan second(), first() dapat memanggil second().
Bagaimana cara memanggil fungsi kelas tanpa membuat objek Python?Namun Anda dapat melakukan hal lain. memanggil metode di kelas tanpa membuat objek. Demonstrasi metode statis di bawah ini. Tentukan kelas dengan metode. Tambahkan kata kunci @staticmethod di atasnya untuk membuatnya statis . |