Lewati ke konten utama

Kelas Abstrak Python: Panduan Komprehensif dengan Contoh

Pelajari kelas abstrak Python, tujuannya, dan cara menggunakan modul `abc` untuk menegakkan antarmuka yang konsisten. Termasuk contoh praktis dan praktik terbaik untuk implementasi yang efektif.
Diperbarui 5 Jun 2026  · 10 mnt baca

Komponen kunci dalam pengembangan perangkat lunak modern adalah pemrograman berorientasi objek (OOP), yang memberi kemampuan bagi programmer untuk mengorganisir kode secara skalabel, modular, dan dapat digunakan kembali. Kelas abstrak adalah salah satu dari banyak konsep OOP yang penting untuk membuat templat yang dapat digunakan oleh kelas lain. Artikel ini akan menjelaskan kelas abstrak, manfaatnya, dan cara menggunakan modul abc milik Python untuk membangunnya dengan sukses.

Jika Anda baru mengenal Python, Anda dapat mempelajari cara bekerja dengan modul dan paket, menggunakan tipe data bawaan, serta menulis fungsi kustom melalui jalur keterampilan kami.

Apa itu Kelas Abstrak?

Kelas abstrak mirip dengan templat untuk kelas lain. Kelas ini mendefinisikan metode yang harus disertakan dalam kelas mana pun yang mewarisinya, tetapi tidak menyediakan kode nyata untuk metode-metode tersebut.

Bayangkan seperti resep tanpa bahan spesifik—resep memberi tahu langkah-langkahnya, tetapi detailnya bergantung pada subkelas.

Contoh:

Misalnya Anda membangun program untuk menghitung luas berbagai bentuk.

  1. Anda membuat kelas abstrak bernama Shape yang menyatakan setiap bentuk harus memiliki metode area().
  2. Tetapi Shape tidak mendefinisikan cara kerja area()—karena rumusnya bergantung pada jenis bentuknya.
  3. Setiap bentuk spesifik (seperti Circle atau Rectangle) mewarisi dari Shape dan menyediakan versinya sendiri untuk area().

Jika Anda ingin mempelajari lebih lanjut konsep-konsep kunci Python, Anda dapat mendaftar di kursus Intermediate Object-Oriented Programming in Python kami.

Mengapa menggunakan kelas abstrak di Python?

Kelas abstrak berguna saat Anda ingin:

  • Menegakkan implementasi metode: Metode-metode dalam kelas abstrak berfungsi sebagai kontrak, yang mengharuskan setiap subkelas menyediakan implementasinya sendiri. Ini menurunkan kemungkinan implementasi yang tidak konsisten atau kurang dengan memastikan fungsi tertentu hadir di semua kelas turunan.
  • Mendorong penggunaan kembali kode: kelas abstrak dapat memiliki metode konkret dan abstrak. Metode konkret sangat mengurangi duplikasi kode dan mendorong prinsip DRY (Don’t Repeat Yourself) dengan menyediakan fungsionalitas bersama yang dapat diwarisi oleh semua subkelas.
  • Meningkatkan keterbacaan dan kemudahan pemeliharaan: Kelas abstrak membantu pengembang lebih memahami struktur dan fungsionalitas perangkat lunak dengan menyediakan kerangka yang konsisten dan transparan. Struktur ini membuat kode lebih mudah dipelihara dengan menegakkan prinsip desain seperti tanggung jawab tunggal dan pemisahan tanggung jawab.
  • Mendorong polimorfisme: Kelas abstrak memungkinkan penulisan kode umum yang bekerja baik dengan berbagai subkelas. Pengembang dapat membuat fungsi atau metode yang dapat menangani subkelas mana pun dari kelas abstrak berkat fleksibilitas ini, yang meningkatkan sifat dapat diperluasnya kode dan kemampuan beradaptasi terhadap perubahan di masa mendatang.

Anda dapat memastikan bahwa subkelas apa pun, seperti Dog atau Cat, mengimplementasikan versinya sendiri dari metode speak, misalnya jika Anda memiliki kelas abstrak Animal dengan metode abstrak speak. Konsistensi ini membuat kode Anda andal dan dapat diprediksi.

Modul abc di Python

Modul abc di Python menawarkan dukungan bawaan yang kuat untuk kelas abstrak. Modul ini, singkatan dari "Abstract Base Classes," memberi programmer alat yang diperlukan untuk membuat kelas abstrak, termasuk dekorator abstractmethod dan kelas ABC.

Dengan mendefinisikan metode abstrak dan mewajibkan implementasinya di subkelas, alat-alat ini membantu Anda menjaga keseragaman dan kepatuhan terhadap antarmuka yang telah ditentukan. Dengan mewajibkan implementasi metode esensial di semua kelas turunan dan mengizinkan implementasi parsial untuk fungsionalitas bersama di kelas dasar abstrak, modul ini juga mendorong pola desain yang lebih baik.

Karena itu, modul ABC adalah komponen penting untuk mengorganisir aplikasi Python yang skalabel, tangguh, dan stabil.

Membuat Kelas Abstrak Python

Dua komponen esensial diperkenalkan dalam modul ABC:

Abstract Base Class, atau ABC

Kelas ABC adalah fitur bawaan Python yang berfungsi sebagai dasar fundamental untuk mengembangkan kelas abstrak. Anda harus mewarisi dari ABC untuk mendefinisikan kelas abstrak. Pewarisan ini menunjukkan bahwa kelas tersebut bersifat abstrak dan tidak dapat diinstansiasi secara langsung. Dengan bertindak sebagai cetak biru, kelas abstrak memastikan bahwa subkelas konkret mana pun mematuhi serangkaian aturan.

Anda dapat mendefinisikan metode abstrak di dalam kelas abstrak dengan menggunakan dekorator abstractmethod. Metode abstrak adalah placeholder yang harus diimplementasikan dan ditimpa oleh subkelas konkret. Ini membuat kode konsisten dan dapat diprediksi dengan menjamin bahwa semua kelas turunan menyediakan fungsionalitas untuk metode yang ditetapkan. Dekorator abstractmethod adalah alat yang berguna untuk mewajibkan implementasi metode sambil memberikan fleksibilitas kepada subkelas dalam cara mereka memenuhi persyaratan tersebut.

Berikut contoh dasar:

from abc import ABC, abstractmethod

class Shape(ABC):
    @abstractmethod
    def area(self):
        pass

    @abstractmethod
    def perimeter(self):
        pass

class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius

    def area(self):
        return 3.14159 * self.radius ** 2

    def perimeter(self):
        return 2 * 3.14159 * self.radius

# Uncommenting the following line will raise an error because we’re missing method implementations
# shape = Shape() # TypeError: Can't instantiate abstract class Shape with abstract methods #area, perimeter

circle = Circle(5)
print(f"Area: {circle.area()}")
print(f"Perimeter: {circle.perimeter()}")

# Area: 78.53975
# Perimeter: 31.4159

Jika Anda mencari proyek Python yang lebih praktis, lihat daftar 60 proyek Python terbaik kami untuk pengembang di semua tingkat.

Bagaimana modul abc menegakkan implementasi metode

Setiap subkelas dari kelas abstrak dijamin mengimplementasikan metode yang didekorasi berkat dekorator abstractmethod. Sebagai pencegahan, ini menghentikan pembuatan subkelas yang tidak memiliki kapabilitas yang diperlukan.

Python akan melaporkan TypeError saat instansiasi subkelas yang tidak menimpa semua metode abstrak. Penegakan ketat ini menurunkan kemungkinan cacat dan meningkatkan stabilitas kode dengan membantu pengembang mengidentifikasi kekurangan implementasi sejak dini.

Ini juga menjamin bahwa semua subkelas konkret mengikuti perilaku dan desain yang dimaksudkan oleh kelas abstrak.

Contohnya:

class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    # Missing area and perimeter implementation

# This will raise an error
rectangle = Rectangle(5, 10)

# TypeError: Can't instantiate abstract class Rectangle with abstract methods area, perimeter

Metode Kelas Abstrak di Python

Di Python, mendefinisikan kelas abstrak dilakukan dengan menggunakan dekorator abstractmethod dan mensubkelaskan dari ABC. Dengan melakukan ini, programmer dapat meletakkan dasar bagi kelas lain dengan mendefinisikan metode yang perlu digunakan.

Berikut prosedur menyeluruh, langkah demi langkah:

  • Impor modul yang diperlukan: Mulailah dengan mengimpor ABC dan abstractmethod dari modul ABC. Alat ini diperlukan untuk mendefinisikan kelas dan metode abstrak.
  • Bangun kelas berbasis ABC: Buat kelas baru dan tetapkan ABC sebagai induknya. Pewarisan ini menunjukkan bahwa kelas tersebut bersifat abstrak dan tidak dapat diinstansiasi secara langsung.
  • Definisikan metode abstrak menggunakan @abstractmethod: Gunakan dekorator @abstractmethod untuk menentukan metode mana yang harus ditimpa oleh subkelas. Pada dasarnya, metode-metode ini berfungsi sebagai placeholder, menjamin bahwa semua kelas turunan menjalankan operasi yang diperlukan.

Contoh langkah demi langkah mendefinisikan kelas abstrak

Berikut contoh praktis untuk mendemonstrasikan:

from abc import ABC, abstractmethod

class Vehicle(ABC):
    @abstractmethod
    def start_engine(self):
        pass

    @abstractmethod
    def stop_engine(self):
        pass

class Car(Vehicle):
    def start_engine(self):
        print("Car engine started")

    def stop_engine(self):
        print("Car engine stopped")

# Instantiating the abstract class directly will raise an error
# vehicle = Vehicle()

car = Car()
car.start_engine()
car.stop_engine()

# Car engine started
# Car engine stopped

Ini menjamin bahwa fungsi start_engine dan stop_engine diimplementasikan oleh subkelas apa pun dari Vehicle.

Contoh praktis: implementasi kelas abstrak

Perhatikan ilustrasi yang lebih mendalam menggunakan kelas Vehicle:

from abc import ABC, abstractmethod

class Vehicle(ABC):
    def __init__(self, brand):
        self.brand = brand

    @abstractmethod
    def start_engine(self):
        pass

    @abstractmethod
    def stop_engine(self):
        pass

class Motorcycle(Vehicle):
    def start_engine(self):
        print(f"{self.brand} motorcycle engine started")

    def stop_engine(self):
        print(f"{self.brand} motorcycle engine stopped")

motorcycle = Motorcycle("Yamaha")
motorcycle.start_engine()
motorcycle.stop_engine()
# Yamaha motorcycle engine started
# Yamaha motorcycle engine stopped

Ini mengilustrasikan bagaimana kelas abstrak memungkinkan fleksibilitas implementasi sekaligus menegakkan antarmuka yang konsisten.

Contoh Abstract Base Class Python

Sekarang setelah kita melihat bagaimana kelas dasar abstrak mendefinisikan kontrak bagi subkelas, mari jelajahi bagaimana kelas konkret memenuhi persyaratan ini dengan mengimplementasikan semua metode abstrak.

Kelas konkret yang mewarisi dari kelas abstrak

Subkelas yang mengimplementasikan setiap metode abstrak dari kelas abstrak disebut kelas konkret. Ini berarti kelas konkret menyediakan implementasi spesifik untuk semua metode yang diperlukan, sehingga memenuhi kontrak yang ditetapkan oleh kelas abstrak.

Contohnya:

from abc import ABC, abstractmethod

class Appliance(ABC):
    @abstractmethod
    def turn_on(self):
        pass

    @abstractmethod
    def turn_off(self):
        pass

class WashingMachine(Appliance):
    def turn_on(self):
        print("Washing machine is now ON")

    def turn_off(self):
        print("Washing machine is now OFF")

machine = WashingMachine()
machine.turn_on()
machine.turn_off()

# Washing machine is now ON
# Washing machine is now OFF

Membuat instance dan menegakkan aturan

Python mencegah Anda langsung menginstansiasi kelas abstrak. Ini adalah aspek penting dari kelas abstrak karena memastikan subkelas mana pun yang dibuat dari kelas abstrak akan mematuhi kontrak yang diperlukan sebagaimana ditetapkan oleh metode abstraknya.

Misalnya, TypeError akan muncul jika Anda mencoba menginstansiasi appliance = Appliance()

Pembatasan ini menjamin bahwa kelas abstrak hanya berfungsi sebagai cetak biru dan tidak disalahgunakan. Python mengizinkan pembuatan instance dari WashingMachine sambil mempertahankan kontrak yang ditentukan dalam Appliance dengan mengimplementasikan semua metode abstrak di WashingMachine. Dengan menjamin bahwa setiap fitur yang ditetapkan dalam kelas abstrak sepenuhnya diimplementasikan dalam subkelas konkretnya, penegakan ini meningkatkan integritas basis kode.

Properti Abstrak dan Inisialisasi

Dengan dasar ini, mari selami lebih dalam bagaimana Python mendukung properti abstrak menggunakan dekorator @property dan @abstractmethod, sehingga pengembang dapat menegakkan konsistensi atribut bersamaan dengan metode.

Menggunakan properti abstrak di Python

Selain metode, kelas abstrak dapat menentukan properti yang harus diimplementasikan oleh subkelas. Fitur ini memungkinkan pengembang memberlakukan antarmuka seragam untuk properti yang harus dideklarasikan oleh subkelas selain metode.

Untuk menjamin setiap subkelas menyediakan implementasinya, properti abstrak dapat ditentukan menggunakan dekorator @property bersama @abstractmethod. Pendekatan ini sangat membantu saat membuat kelas yang memerlukan atribut hanya-baca atau terhitung yang esensial bagi operasi kelas.

Contoh: kelas abstrak dengan properti

Berikut contohnya:

from abc import ABC, abstractmethod

class Animal(ABC):
    @property
    @abstractmethod
    def sound(self):
        pass

class Bird(Animal):
    @property
    def sound(self):
        return "Chirp"

bird = Bird()
print(bird.sound)

# Chirp

Ketentuan dalam kelas abstrak Animal dipenuhi oleh properti sound pada kelas Bird.

Kapan Menggunakan Kelas Abstrak Python

Kelas abstrak ideal untuk skenario seperti:

  • Saat merancang framework atau library di mana perilaku tertentu perlu ditegakkan: Dalam sistem yang kompleks, kelas abstrak dapat menetapkan seperangkat pedoman atau antarmuka terpadu yang harus dipatuhi semua subkelas, menjamin konsistensi dan mengurangi kesalahan.
  • Menerapkan API yang konsisten di berbagai kelas: Dengan mendefinisikan metode abstrak, pengembang dapat memastikan bahwa semua kelas turunan menawarkan cara yang terstandar dan dapat diprediksi untuk berkomunikasi dengan aplikasi atau library.
  • Menyediakan kerangka dasar untuk hierarki kelas: Kelas abstrak dapat menjadi panduan untuk membuat hierarki kelas yang saling terkait. Dengan mengizinkan kustomisasi di subkelas dan memungkinkan pengembang mendeklarasikan perilaku serta karakteristik bersama di kelas abstrak, struktur ini mendorong penggunaan kembali dan meminimalkan duplikasi.

Praktik terbaik

Gunakan kelas abstrak ketika perlu menetapkan kontrak yang jelas untuk subkelas. Kelas abstrak berguna saat Anda perlu menerapkan struktur atau perilaku tertentu pada beberapa kelas turunan. Kelas ini membantu memastikan setiap subkelas mengikuti desain standar, yang meningkatkan prediktabilitas kode dan mempermudah pemeliharaan.

Jika setiap metode dapat memiliki implementasi default, jangan gunakan kelas abstrak. Dalam situasi tertentu, kelas dasar konkret bisa menjadi opsi yang lebih baik untuk mengurangi kompleksitas sambil tetap menjaga kemampuan penggunaan kembali fungsionalitas bersama.

Pastikan kelas abstrak jelas dan sederhana, hanya mendefinisikan atribut dan metode yang paling penting. Kelas abstrak dengan terlalu banyak persyaratan bisa sulit dibangun dan dipelihara. Sebagai gantinya, fokuslah pada aspek-aspek esensial yang harus dimiliki kelas turunan.

Kesimpulan

Kelas abstrak termasuk dalam peralatan OOP Python, yang merupakan alat ampuh yang memungkinkan programmer membuat program yang andal dan mudah dipelihara. Anda dapat mendorong kejelasan, kemampuan penggunaan kembali, dan kemampuan perluasan dalam aplikasi dengan mendefinisikan kelas abstrak dan menegakkan antarmuka seragam di seluruh subkelas dengan bantuan modul ABC. Menulis kode yang lebih baik dan lebih andal dapat dicapai dengan menerapkan kelas abstrak, terlepas dari ukuran sistem yang Anda kerjakan.

Baik Anda sedang merancang program berorientasi objek yang andal, menegakkan antarmuka yang konsisten, atau membuat aplikasi yang skalabel, menguasai kelas abstrak Python akan meningkatkan kemampuan Anda menulis kode yang efisien dan mudah dipelihara. Tingkatkan pengetahuan Python Anda hari ini dengan jalur keterampilan Python Fundamentals kami yang komprehensif.

FAQ Kelas Abstrak Python

Bagaimana Anda mendefinisikan metode abstrak di Python?

Metode abstrak didefinisikan menggunakan dekorator @abstractmethod dari modul abc. Metode ini berfungsi sebagai placeholder dan harus ditimpa oleh subkelas mana pun.

Dapatkah Anda menginstansiasi kelas abstrak di Python?

Tidak, Anda tidak dapat menginstansiasi kelas abstrak secara langsung. Python akan menampilkan TypeError jika Anda mencoba membuat objek dari kelas abstrak.

Apa tujuan modul `abc` di Python?

Modul abc menyediakan kelas ABC dan dekorator abstractmethod untuk mendefinisikan dan menegakkan kelas serta metode abstrak di Python.

Dapatkah kelas abstrak memiliki metode reguler (konkret)?

Ya, kelas abstrak dapat memiliki metode konkret dengan implementasi. Metode-metode ini dapat diwarisi dan digunakan oleh subkelas.


Derrick Mwiti's photo
Author
Derrick Mwiti
Topik

Kursus Python Teratas

Program

Dasar-Dasar Data Python

28 Hr
Kembangkan keterampilan data Anda, pelajari cara mengolah dan memvisualisasikan data, serta terapkan analisis canggih untuk mengambil keputusan berbasis data.
Lihat DetailRight Arrow
Mulai Kursus
Lihat Lebih BanyakRight Arrow
Terkait

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat Lebih BanyakLihat Lebih Banyak