Rumah > Soal Jawab > teks badan
伊谢尔伦2017-04-18 09:06:34
Ringkasnya
@property
ialah penghias yang digunakan untuk menggantikan getter/setter dalam Python Ia boleh membungkus, memproses dan merangkum atribut kelas, dan ia juga boleh mencipta atribut baca sahaja perkara utama ialah ia Mengekalkan antara muka mudah. Kerana kita boleh mengakses sifat secara intuitif tanpa perlu menggunakan getter/setters yang membosankan seperti get_XXX
dan set_XXX
. Saya pada asalnya ingin menulis penjelasan yang lengkap, tetapi setelah difikirkan, saya merasakan ianya tidak cukup menyeluruh, jadi saya berputus asa dan menunggu untuk menyiapkannya pada masa akan datang Jika ada pakar lain yang tahu bidang ini, sila rasa bebas memberi pendapat kepada saya dan penanya.
@staticmethod
Saya rasa ia adalah tiada kegunaan praktikal penghias yang tidak penting (jika anda mempunyai pendapat berbeza tentang perkara ini, dialu-alukan untuk berbincang, saya benar-benar mahu untuk membincangkan perkara ini) )
(Jawapan ini agak sukar. Jika anda merasa sukar untuk membaca Bahasa Cina Tradisional, anda boleh menggunakan penyemak imbas anda untuk menukarnya kepada Bahasa Cina Ringkas dan membacanya...)
Mari kita bincangkan tentang kaedah kelas
strong>Kategori. kaedahakan menerima rujukan contoh dan kategori sebagai parameter pertama masing-masing), yang menjadikan kaedah statik seperti fungsi biasa, kecuali ia kebetulan ditakrifkan dalam kelas dan bukannya secara langsung di peringkat modul.
Jadi situasi penggunaannya ialah: apabila fungsi dalam kelas tidak memerlukan contoh atau kelas seperti self
atau cls
Apabila merujuk , menggunakan kaedah statik boleh menyelesaikan kerja dengan lebih ringkas dan cekap.
Bahagian ringkasnya ialah anda tidak perlu menerima hujah tambahan yang tidak penting
Kecekapan terletak pada fakta bahawa kaedah contoh umum ialah kaedah terikat (objek) dan dijana apabila kita mahu menggunakannya. Ini akan menelan belanja lebih sedikit, tetapi kaedah statik tidak
Tetapi saya fikir ia tidak praktikal Pertama sekali, kita boleh menggunakan classmethod
untuk fungsi yang berkaitan secara langsung dengan kelas Dalam kod, kita bergantung pada rujukan kelas yang disediakan oleh argumen pertama untuk melengkapkan operasi berkaitan Kelas (seperti penggantian __init__
atau sebagai kaedah peringkat atas yang menghantar lebih banyak subkelas staticmethod
).
Jika ia tidak berkaitan dengan kelas (dan tiada kaitan dengan contoh), maka kita memerlukan tujuan kaedah statik kategori saya hanya boleh memikirkan satu buat masa ini: untuk mempunyai tahap abstrak dalam panggilan (ya, saya bercakap tentang < strong >ruang nama) Walaupun fungsi ini tidak menghubungi kelas secara langsung, ia berkaitan dengan kelas.
Tetapi dalam Python, sangat mudah untuk menggunakan ruang nama
Kita mungkin juga mentakrifkan fungsi yang pada asalnya ingin kita takrifkan sebagai kaedah statik pada peringkat modul, dan meletakkannya dalam yang berkaitan. kategori sebanyak mungkin yang berdekatan, saya rasa itu sudah cukup (pendapat Luciano Ramalho).
Selepas saya selesai menaip perenggan di atas, saya secara khusus membaca artikel yang sangat baik oleh Julien Danjou:
Panduan muktamad tentang cara menggunakan kaedah statik, kelas atau abstrak dalam Python
I Artikel ini amat disyorkan untuk sesiapa yang ingin mengetahui kaedah Python.
Artikel ini mengemukakan dua kelebihan staticmethod
Perkara pertama yang saya nyatakan di atas ialah kaedah statik lebih ringkas dan cekap daripada kaedah contoh. Perkara kedua ialah kaedah statik tiada kaitan dengan kelas tetapi tergolong dalam kelas, yang bermaksud bahawa mereka boleh menyesuaikan perkhidmatan untuk kelas. Ini agak sukar untuk difahami, jadi mari kita lihat contoh (contoh dalam artikel Julien Danjou):
class Pizza(objek):
@kaedah statik
def campuran_bahan(x, y):
kembalikan x + y
def masak (diri sendiri):
kembalikan diri.campuran_bahan(diri.keju, diri.sayuran)
Mari bayangkan jika kita mentakrifkan mix_ingredients
pada peringkat modul, maka apabila kita berurusan dengan subclass yang mewarisi Pizza
, kita tidak akan dapat menukar mix_ingredients
untuk menukar tingkah laku bahan campuran (kerana fungsi ini digunakan oleh kelas lain), maka kita perlu mengatasi masak
.
Sebab ini sedikit mengubah fikiran saya Sekurang-kurangnya dia menunjukkan perbezaan terbesar antara kaedah statik dan kaedah umum Kaedah statik tergolong dalam kategori tertentu.
Walau bagaimanapun, saya masih berpegang pada idea asal saya, kerana mungkin mix_ingredients
membebankan seperti menukar masak
.
Semuanya Saya rasa mungkin suatu hari nanti
Soalan yang saya jawab: Python-QA