NotImplementedError: Bagaimana untuk menyelesaikan ralat kaedah Python yang tidak dilaksanakan?

WBOY
Lepaskan: 2023-06-24 14:16:36
asal
9952 orang telah melayarinya

Dalam pengaturcaraan Python, apabila kita ingin memanggil kaedah yang belum dilaksanakan, mesej ralat NotImplementedError akan muncul. Ralat ini boleh mengelirukan kami kerana ia tidak memberitahu kami cara untuk membetulkannya dengan jelas. Dalam artikel ini, kami akan meneroka punca NotImplementedError dan menyediakan beberapa penyelesaian untuk membantu anda mengatasi ralat ini.

  1. Apakah NotImplementedError?

NotImplementedError ialah salah satu pengecualian terbina dalam Python dan mewakili kaedah atau operasi yang tidak dilaksanakan. Biasanya, mesej ralat jenis ini akan muncul dalam kaedah yang tidak dilaksanakan dalam kelas atau antara muka abstrak, mengingatkan pengaturcara bahawa mereka perlu melaksanakan fungsi yang berkaitan.

Kelas abstrak dalam Python ialah kelas khas yang tidak boleh dibuat seketika dan hanya boleh diwarisi. Kaedah dalam kelas abstrak biasanya hanya mempunyai nama dan parameter, tetapi tiada pelaksanaan. Kaedah ini perlu ditindih oleh subkelas untuk mendapatkan kefungsian sebenar.

Dalam Python, kita boleh menggunakan perpustakaan ABC untuk mentakrifkan kelas dan antara muka abstrak. Jika kita tidak melaksanakan semua kaedah abstrak dalam kelas induk dalam kelas anak, maka apabila kita cuba memanggil kaedah ini, pengecualian NotImplementedError akan dicetuskan.

  1. Bagaimana untuk menyelesaikan NotImplementedError?

(1) Laksanakan kaedah yang tidak dilaksanakan

Apabila pengecualian NotImplementedError berlaku, penyelesaian paling mudah ialah melaksanakan kaedah yang berkaitan mengikut gesaan ralat. Sebagai contoh, jika kita menggunakan kaedah foo() yang tidak dilaksanakan, maka kita boleh melaksanakan kaedah ini dalam kod dan menjalankan semula program.

(2) Gunakan ruang letak

Apabila kami mereka bentuk kelas atau antara muka, kami mungkin menghadapi situasi di mana kami perlu menempah kaedah tetapi tidak mengetahui pelaksanaan khusus. Pada masa ini, kita boleh menggunakan ruang letak untuk menggantikan sementara pelaksanaan kaedah. Dalam Python, kita boleh menggunakan kata kunci pas untuk melaksanakan ruang letak.

Sebagai contoh, katakan kita mempunyai kelas abstrak Haiwan, yang mengandungi kaedah eat():

from abc import ABC, abstractmethod

class Animal(ABC):
    @abstractmethod
    def eat(self):
        pass
Salin selepas log masuk

Dalam contoh ini, kita menggunakan pas untuk menggantikan sementara pelaksanaan kaedah makan. Apabila kami melaksanakan subkelas dan perlu mengatasi kaedah makan, kami boleh memadamkan pas dan melaksanakan kod yang berkaitan.

(3) Melebihkan kaedah kelas asas

Jika kita tidak dapat melaksanakan kaedah abstrak atau antara muka dalam kelas induk dalam subkelas, kita boleh mempertimbangkan untuk melebihkan kaedah kelas asas. Overloading merujuk kepada kaedah yang ditakrifkan semula dalam subkelas dan mempunyai nama yang sama dengan kaedah dalam kelas asas tetapi mempunyai tingkah laku yang berbeza.

Sebagai contoh, kami mempunyai kelas abstrak yang dipanggil Shape, yang mengandungi kaedah abstrak yang dipanggil area(). Kita boleh membebankan kaedah kawasan dalam subkelas dan melaksanakan logik yang berkaitan.

from abc import ABC, abstractmethod

class Shape(ABC):
    @abstractmethod
    def area(self):
        pass
    
class Circle(Shape):
    def __init__(self, r):
        self.radius = r
        
    def area(self):
        return 3.14 * self.radius * self.radius
Salin selepas log masuk

Dalam contoh ini, kami mencipta subkelas yang dipanggil Bulatan dan melebihkan kaedah kawasan dalam kelas Shape. Oleh itu, walaupun kaedah kawasan dalam kelas Shape tidak mempunyai pelaksanaan konkrit, kita boleh memanggil kaedah dalam objek Circle dan ia akan berjalan seperti biasa.

(4) Gunakan raise NotImplementedError

Dalam sesetengah kes, kita mungkin tidak mahu melaksanakan kaedah tertentu dalam subkelas, tetapi mahu membuang pengecualian NotImplementedError apabila dipanggil. Dalam kes ini, kita boleh menggunakan kata kunci raise untuk menaikkan pengecualian.

Sebagai contoh, kami mempunyai kelas Pangkalan Data, yang mengandungi kaedah sambung, dan kami mahu apabila menginstant objek, jika tiada parameter diluluskan, pengecualian NotImplementedError akan dilemparkan:

class Database:
    def __init__(self, host=None, port=None):
        if host is None and port is None:
            raise NotImplementedError("Database connection details not provided")
        self.host = host
        self.port = port
        
    def connect(self):
        # connect to database using host and port
        pass
Salin selepas log masuk

Dalam contoh ini, jika kami cuba untuk Apabila menukar objek Pangkalan Data, tidak menyediakan sebarang parameter akan menyebabkan pengecualian NotImplementedError.

Sebagai kesimpulan, NotImplementedError ialah pengecualian biasa dalam pengaturcaraan Python dan biasanya berkaitan dengan kaedah yang tidak dilaksanakan dalam kelas atau antara muka abstrak. Menurut falsafah Python, "gunakan mesej ralat untuk mengingatkan pengaturcara bahawa mereka telah melanggar kontrak", oleh itu, kita harus belajar untuk menyelesaikan pengecualian NotImplementedError dan cuba mengelakkan situasi ini dalam program kami.

Atas ialah kandungan terperinci NotImplementedError: Bagaimana untuk menyelesaikan ralat kaedah Python yang tidak dilaksanakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan