Cara Menggunakan Kelas Abstrak dengan Python

Foto oleh Jr Korpa di Unsplash

Apa itu Kelas Abstrak?

Kelas abstrak adalah kelas, tetapi bukan kelas yang dapat Anda buat objeknya secara langsung. Tujuannya adalah untuk menentukan bagaimana seharusnya kelas lain terlihat, yaitu metode dan properti apa yang diharapkan untuk dimiliki.

Metode dan properti yang didefinisikan (tetapi tidak diimplementasikan) dalam kelas abstrak disebut metode abstrak dan properti abstrak . Semua metode dan properti abstrak perlu diimplementasikan di kelas anak agar dapat membuat objek darinya.

Kita dapat membuat kelas abstrak dengan mewarisi dari ABCkelas yang merupakan bagian dari abcmodul .

from abc import (
  ABC,
  abstractmethod,
)

class BasicPokemon(ABC):
  def __init__(self, name):
    self.name = name
    self._level = 1
@abstractmethod
  def main_attack(self):
    ...

Apa yang terjadi jika Anda mencoba dan membuat objek dari BasicPokemonlangsung? TypeError!

Mencoba membuat objek baru dari kelas abstrak dan gagal karena main_attack tidak diimplementasikan. Gambar oleh penulis.

Sekarang, Anda akan melihat bahwa metode BasicPokemonitu mengharapkan argumen , oleh karena itu kode di atas tidak akan berfungsi. Hal yang perlu diperhatikan di sini adalah bahwa ia bahkan tidak pergi ke metode untuk memeriksanya. Fakta bahwa ia memiliki metode abstrak yang belum diimplementasikan lebih diutamakan dan gagal karena itu!__init__name__init__

Ini adalah bagaimana seseorang akan menggunakan BasicPokemonkelas.

from collections import namedtuple

Attack = namedtuple('Attack', ('name', 'damage'))

class Pikachu(BasicPokemon):
  def main_attack(self):
    return Attack('Thunder Shock', 5)

class Charmander(BasicPokemon):
  def main_attack(self):
    return Attack('Flame Thrower', 5)

Membuat Pikachu baru bernama … George. Gambar oleh penulis.

Perhatikan bahwa Anda juga dapat membuat properti abstrak menggunakan abstractmethoddekorator yang sama.

from abc import (
  ABC,
  abstractmethod,
)

class BasicPokemon(ABC):
  def __init__(self, name):
    self.name = name
  @property
  @abstractmethod
  def level(self):
    ...
  @abstractmethod
  def main_attack(self):
    ...

class Pikachu(BasicPokemon):
  @property
  def level(self):
    return 1
def main_attack(self):
    return Attack('Thunder Shock', 5)

Beberapa dari Anda mungkin bertanya-tanya mengapa kita tidak bisa hanya menggunakan kelas normal (yaitu tidak mewarisi dari ABC) dan meningkatkan NotImplementerErrormetode for yang belum diterapkan, seperti pada contoh di bawah ini.

class NotAbstractBasicPokemon:
  def __init__(self, name):
    self.name = name
    self._level = 1
def main_attack(self):
    raise NotImplementedError()

Membuat objek dari NotAbstractBasicPokemon dan mendapatkan kesalahan saat mencoba memanggil main_attack(). Gambar oleh penulis.

Sebaliknya, mencoba membuat objek dari BasicPokemonhasil kesalahan segera, seperti yang kita lihat sebelumnya.

Kapan Saya Harus Menggunakan Kelas Abstrak?

Dalam contoh yang telah kami gunakan dalam posting ini, BasicPokemontujuannya adalah untuk digunakan sebagai cetak biru untuk membuat kelas lain untuk jenis Pokemon tertentu. Ada beberapa manfaat nyata untuk memiliki kelas abstrak yang perlu diwarisi setiap orang untuk membuat Pokemon baru:

  • Hindari duplikasi kode.
  • Pastikan konsistensi dalam cara orang lain mengimplementasikan subclass.
  • Pastikan tidak ada yang lupa untuk mengimplementasikan metode dan properti penting di subkelas.

Kesimpulan

Dalam posting ini, kami telah melihat kelas abstrak Python dan bagaimana mereka memberi kami cara untuk menggambarkan bagaimana kami mengharapkan subclass diimplementasikan dan memperingatkan pengguna (yaitu programmer lain atau diri kita di masa depan) ketika bagian penting tidak ditentukan.

  • Ikuti saya di Medium untuk pembaruan.
  • Bergabunglah dengan Medium dengan tautan rujukan saya untuk akses tak terbatas ke posting. Biaya keanggotaan Anda secara langsung mendukung saya dan penulis yang Anda baca.

[1]https://docs.python.org/3/library/abc.html

[2]https://realpython.com/python-interface/

Lebih dari penulis yang sama.

Menghitung Menggunakan Simulasi Monte-Carlo

Suggested posts

Mencari Informasi Tentang Nama Domain

Kutipan dari Alat Perangkat Lunak Kecil dan Tajam oleh Brian P. Hogan

Mencari Informasi Tentang Nama Domain

Saat Anda membuat permintaan ke facebook.com, komputer Anda mencari nama domain untuk menerjemahkan nama domain tersebut menjadi alamat IP sehingga komputer Anda dapat membuat koneksi tersebut.

Cara menjalankan plugin ChatGPT secara gratis menggunakan Langchain

Cara menjalankan plugin ChatGPT secara gratis menggunakan Langchain

Anda pasti pernah mendengar tentang semua plugin ChatGPT baru yang kuat seperti Browser, Code Interpreter, dll. Namun ada masalah, akses ke plugin terbatas pada daftar tunggu sehingga banyak yang tidak memiliki akses ke sana.

Related posts

Lacak Siapa Saja Hanya dengan Nomor Telepon | Investigasi OSINT

Lacak Siapa Saja Hanya dengan Nomor Telepon | Investigasi OSINT

Anda bisa menjadi Penyelidik OSINT, Pemain CTF, atau sekadar seseorang yang menerima panggilan spam. Seseorang yang mencoba memverifikasi nomor yang Anda lihat di iklan.

Erosi Lambat: Mengungkap Cara Orang Menghilang dalam Kariernya

Erosi Lambat: Mengungkap Cara Orang Menghilang dalam Kariernya

Di dunia yang serba cepat dan kompetitif saat ini, karier seseorang memainkan peran penting dalam pertumbuhan pribadi, stabilitas keuangan, dan kepuasan hidup secara keseluruhan. Namun, banyak orang menemukan diri mereka terjebak dalam siklus stagnasi dan ketidakpuasan tanpa henti, secara bertahap menyia-nyiakan kehidupan profesional mereka.

Apa yang membuat podcast berpengaruh?

Apa yang membuat podcast berpengaruh?

Minggu lalu saya melihat siaran pers, dikirim melalui PressGazette (situs web berita media Inggris). Artikel tersebut mengumumkan bahwa Acast, perusahaan hosting dan periklanan podcast Scandi, akan memimpin konsorsium penerbit "mungkin yang paling berpengaruh" dalam podcasting.

Apakah Seni Pernah Apolitis?

Apakah Seni Pernah Apolitis?

Kemarin kami menutup pintu pada Kontes Lagu Eurovision tahun ini dengan grand final yang gemerlap dan kacau di mana penyanyi Swedia Loreen membawa pulang trofi, menjadi wanita pertama yang menang dua kali dan membawa mahkota kembali ke Swedia 50 tahun setelah ABBA memenangkan kompetisi dengan "Waterloo". Mereka kemudian menjadi salah satu aksi terbesar dalam kanon musik pop.