Bagaimanakah `super()` Mengerjakan Keajaibannya dalam Python 3.x Tanpa Sebarang Hujah?

Patricia Arquette
Lepaskan: 2024-10-27 02:12:30
asal
227 orang telah melayarinya

 How Does `super()` Work Its Magic in Python 3.x Without Any Arguments?

Super() Magic dalam Python 3.x

Dalam Python 3.x, fungsi super() mempunyai keupayaan unik: ia boleh dipanggil tanpa sebarang hujah. Tingkah laku ini, walaupun pada mulanya mengejutkan, berpunca daripada pilihan reka bentuk yang disengajakan yang diperkenalkan untuk menangani masalah pengaturcaraan biasa.

Mengelakkan Pelanggaran KERING dan Kesamaran Nama Kelas

Sebelum Python 3 .x, penamaan kelas secara eksplisit diperlukan apabila menggunakan super(), seperti yang ditunjukkan dalam coretan kod berikut:

<code class="python">class Foo(Bar):
    def baz(self):
        return super(Foo, self).baz() + 42</code>
Salin selepas log masuk

Walau bagaimanapun, pendekatan ini melanggar prinsip DRY dan terdedah kepada kesamaran nama kelas yang disebabkan oleh penghias semula atau penghias kelas global. Untuk mengurangkan isu ini, Python 3.x memperkenalkan pelaksanaan ajaib super().

Memanfaatkan Kelas Sel untuk Resolusi Masa Jalan

pelaksanaan semasa super() menggunakan sel kelas. Sel ini menyediakan akses kepada objek kelas asal, membolehkan super() menyelesaikan superclass pada masa jalan tanpa memerlukan penamaan kelas yang jelas. Akibatnya, kod berikut berfungsi seperti yang dimaksudkan, walaupun Foo ditugaskan semula:

<code class="python">class Foo(Bar):
    def baz(self):
        return super().baz() + 42

Spam = Foo
Foo = something_else()

Spam().baz()  # still works</code>
Salin selepas log masuk

Butiran Kompromi dan Pelaksanaan

Pada mulanya, super() telah dicadangkan sebagai kata kunci, tetapi kebimbangan tentang persepsinya sebagai "terlalu ajaib" membawa kepada pelaksanaan semasa. Guido van Rossum sendiri mengiktiraf potensi kekaburan menggunakan nama yang berbeza untuk super().

Potensi Kelemahan

Walaupun tingkah laku ajaib super() umumnya bermanfaat, ia boleh membawa kepada hasil yang tidak dijangka jika superclass diubah suai secara dinamik atau jika super() dinamakan semula. Dalam senario sedemikian, adalah dinasihatkan untuk merujuk pembolehubah kelas secara eksplisit dalam kaedah untuk memastikan kefungsian yang betul.

Contoh Alternatif Fungsi yang Dipengaruhi oleh Penamaan Semula

Fungsi dan kaedah Python lain yang boleh dipengaruhi oleh penamaan semula termasuk:

  • type()
  • isinstance()
  • issubclass()
  • harta()
  • kaedah kelas()
  • kaedah statik()

Atas ialah kandungan terperinci Bagaimanakah `super()` Mengerjakan Keajaibannya dalam Python 3.x Tanpa Sebarang Hujah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!