Mari kita bicara tentang sesuatu yang terdengar cukup rumit.
Ini disebut m r o atau Urutan Resolusi Metode.
Apa artinya?
Kami akan memiliki contoh di sini untuk Anda.
Katakanlah kita memiliki kelas A, kelas B yang mewarisi dari kelas A sama sekali tidak melakukan apa-apa.
Dan kemudian kami juga memiliki kelas yang mewarisi lagi dari A dan akhirnya kelas D, kemudian mewarisi dari
B dan C.
Jadi kami memiliki dua kelas yang sama sekali tidak melakukan apa-apa, dan kemudian kelas A dan kelas yang memiliki
atribut objek kelas yang sama.
Dan saya benar-benar menggambarkan bagaimana hubungan ini terlihat.
Anda melihat bahwa D memiliki pewarisan berganda dari B dan C dan B dan C mewarisi dari A.
Dan apakah saya salah atau urutan resolusi metode adalah aturan yang diikuti Python untuk menentukan kapan Anda menjalankan metode yang
ingin dijalankan, ketika Anda memiliki struktur pewarisan yang rumit dan Maroš adalah aturan yang mengatakan,
hei, lakukan ini, lakukan ini dan kemudian lakukan itu.
Dan itulah metode yang harus Anda jalankan.
Mari saya tunjukkan apa yang saya maksud.
Katakanlah saya ingin melakukan print d dot num.
Menurut Anda apa yang akan terjadi di sini?
Biarkan saya menyingkir dari ini atau mengomentari ini.
Jika saya menjalankan ini, dapatkah Anda menebak apa yang akan terjadi?
Jika saya klik, jalankan.
saya mendapatkan satu.
Apakah itu yang Anda harapkan?
Mari kita lihat ini, D mewarisi dari B dan C.
Dan kemudian mereka mewarisi dari saya, jadi kita mendapatkan satu, karena sumsum, urutan penyelesaian metodenya
adalah bukan D, B, A, melainkan D, b, c, a.
Hmmm, mari kita pikirkan ini sedikit lagi, MRO hanya mengatakan apa yang pertama di baris jika
ada kesamaan antara kelas, metode atau variabel atau atribut, apa yang harus saya pilih?
Dan sebenarnya ada cara yang baik bagi kita untuk memeriksa ini jika saya melakukan MRO dan kemudian menjalankannya seperti ini.
Ron.
Lihat itu, ini pesanan atau MRO kelas ini, katanya, hei, saya akan memeriksa dulu jika Anda
menelepon, katakanlah dot net atau dot.
Tidak, saya akan memeriksa titik utama terlebih dahulu.
Jadi saya akan memeriksa kelas ini.
Lalu saya akan memeriksa Main Dot be.
Jadi saya akan memeriksa B dan kemudian saya akan memeriksa C.
Dan kemudian saya akan memeriksa a.
Dan akhirnya, saya akan memeriksa objek kelas dasar lagi.
Kami telah melihat itu sebelumnya.
Ini adalah kelas dasar yang diwarisi oleh semua objek dalam Python.
Jadi itu urutan yang diperiksa?
Tidak.
Jika kita melewati semua ini.
Dan saya klik jalankan.
Aku akan mendapatkan yang lain.
D tidak memiliki atribut, tidak, karena ia melewati semua jalur ini, bahkan memeriksa objek dasar dan tidak
pernah menemukannya.
Jika saya melakukan sesuatu seperti s t r.
Jika saya klik, jalankan.
Ini berfungsi karena ia melewati rantai pewarisan dan kemudian sampai ke objek dasar dan
objek dasar sebenarnya memiliki ini sehingga tidak terkikis.
Dan ya, Anda dapat menggunakan string Dundar.
Sekarang, saya menemukan contoh yang bagus di sini untuk menunjukkan kepada Anda mengapa pewarisan dapat membingungkan
dan mengapa hal-hal seperti MRO mungkin ingin Anda hindari atau setidaknya Anda sadari.
Jadi mari kita salin kode ini.
Dan mari kita hapus semua ini.
Dan kita akan memainkan permainan kecil.
Sekarang, sintaks ini.
Sepertinya ini, jadi ini adalah model pewarisan yang baru saja kita buat terlihat cukup membingungkan, bukan?
Jadi jika kita melakukannya di sini.
Dan kami memeriksa urutan MRO atau metode resolusi dari sebuah.
Bagaimana menurut Anda urutannya akan dijeda video di sini dan coba tebak apa urutannya?
redi.
Ayo lakukan, Dot Amaro.
Dan omong-omong, cara lain untuk melakukan ini adalah dengan menggunakan Dundar Amaro dan mari kita cetak ini.
Baiklah, mari kita periksa ini.
Jadi hal pertama yang kita miliki adalah M. Baiklah, kita periksa dia dan kemudian kita periksa B, kita periksa B, baiklah.
Dan kemudian kita periksa A, jadi kita periksa di sini dan kemudian kita periksa X X di sini, lalu Y.
Kemudian Z, lalu objek kelas.
Apakah itu sebabnya Anda menebak mari kita lihat kodenya.
Mengapa urutan ini?
Nah, urutannya adalah karena cara kita melewati parameter, Anda melihat B dilewati sebelum A dan
C.
Jadi itu berarti urutan MRO akan menjadi B, maka A.
Tapi tunggu dulu, setelah BNA, apa itu?
Nah, setelah B dan A, kami memiliki Kelas X, mengapa X datang sebelum Z?
Jadi daripada pergi ke Z, mari kita buat ini sedikit lebih besar, daripada pergi ke apa yang kita pikir
akan menjadi Z.
Ia pergi ke X, lalu Y, Lindsey, lalu objek.
Ini karena algoritma yang mereka gunakan untuk melakukan MRO, yang disebut depth for a search.
Sekarang, ini di luar cakupan kursus, tetapi seperti yang Anda lihat, ini agak membingungkan.
Dan faktanya, Python benar-benar mengubah aturan MRO dari apa yang kami miliki sebelumnya di versi Python yang
lebih muda.
Jadi ini adalah salah satu dari hal-hal yang diperbarui.
Tetapi alasan saya menunjukkan ini kepada Anda adalah karena Anda tidak akan pernah diuji.
Jika Anda menulis kode di mana warisan terlihat seperti ini, saya berpendapat bahwa Anda menulis kode yang buruk karena
ini terlalu rumit, kami bahkan belum menulis kode apa pun sebenarnya di dalam kelas-kelas ini, dan
itu sudah membingungkan.
Jadi MRO ada sebagai cara untuk menentukan urutan apa yang akan Anda warisi dan Anda selalu dapat menggunakan fungsi
MRO atau Dundar untuk memeriksanya, tetapi alasan saya membawanya ke sini bukan hanya untuk membingungkan Anda.
Alasannya adalah bahwa itu ada.
Namun, Anda tidak boleh menyusun kode Anda dengan cara ini.
Ini tidak berarti bahwa ini tidak terjadi di alam liar.
Ya, memang, tetapi setidaknya Anda memiliki cara untuk memeriksa dan mungkin men-debug kode Anda ketika Anda melihat masalah
seperti ini.
Saya akan meninggalkan sumber daya untuk Anda tentang MRO jika Anda benar-benar penasaran dan Anda benar-benar ingin
memahami cara kerja algoritme ini dan bagaimana urutan ini sebenarnya ditentukan.
Tetapi kuncinya adalah bahwa ini adalah cara kerja Python untuk menentukan, hei, ketika Anda
memanggil metode atau atribut.
Ini adalah bagaimana saya akan mencari hierarki warisan, baiklah, jika otak Anda sakit.
Jangan khawatir.
Begitu juga milikku.
Istirahat sejenak dan sampai jumpa di video selanjutnya oleh.