Mengapa Saya Berhenti Menggunakan Class di Python (Dan Apa yang Saya Gunakan Sebagai Gantinya)

Mengapa Saya Berhenti Menggunakan Class di Python (Dan Apa yang Saya Gunakan Sebagai Gantinya)

id9 min read • 688 views

Mengapa Saya Berhenti Menggunakan Class di Python (Dan Apa yang Saya Gunakan Sebagai Gantinya)

Dulu, setiap kali menulis kode Python, refleks saya selalu sama: bikin class dulu. Kebiasaan ini datang dari latar belakang belajar bahasa seperti Java dan C++, di mana hampir semua hal dibungkus dalam class. Rasanya seperti “aturan tak tertulis” bahwa kode yang bagus harus berbentuk objek.

Tapi semakin lama menulis Python—terutama untuk scripting, automation, backend ringan, dan data processing—saya mulai sadar sesuatu: tidak semua hal perlu class. Bahkan, dalam banyak kasus, class justru menambah kompleksitas yang tidak perlu.

Ini bukan artikel anti-OOP. Saya tetap menggunakan class ketika memang tepat. Tapi saya berhenti menggunakannya secara default. Dan jujur saja, kode saya jadi lebih simpel, lebih bersih, dan lebih Pythonic.

  1. Python Bukan Sekadar Bahasa OOP

Salah satu kesalahan umum yang sering terjadi adalah menganggap Python seperti Java versi lebih santai. Padahal Python adalah multi-paradigm language. Ia mendukung:

  • Object-Oriented Programming (OOP)
  • Functional Programming
  • Procedural Programming

Artinya, kamu tidak wajib membungkus semuanya dalam class.

Di Java, hampir semua hal harus ada di dalam class. Bahkan fungsi pun harus menjadi method. Tapi di Python? Kamu bisa menulis fungsi langsung di file dan langsung menjalankannya.

Contoh sederhana:

def greet(name):
    return f"Hello, {name}"

Selesai. Tidak perlu class Greeter. Tidak perlu constructor. Tidak perlu self.

Untuk banyak script kecil—automation, CLI tools, parsing file, API request sederhana—OOP justru terasa berlebihan.

Baca Juga

 

  1. Classes Menambah Boilerplate

Mari kita bandingkan dua pendekatan untuk hal sederhana.

Versi class:

class Calculator:
    def add(self, a, b):
        return a + b

Versi fungsi biasa:

def add(a, b):
    return a + b

Untuk kasus sekecil ini, class jelas terasa overkill.

Dalam versi class, kita punya:

  • Keyword class
  • Method definition
  • Parameter self
  • Harus instansiasi objek dulu sebelum dipakai

Sedangkan versi fungsi:

  • Lebih pendek
  • Langsung bisa dipakai
  • Lebih jelas maksudnya

Semakin kecil problemnya, semakin terasa berat penggunaan class. Boilerplate seperti ini memang tidak terasa besar di awal, tapi ketika kode makin panjang, struktur yang tidak perlu bisa memperumit pemeliharaan.

 

  1. Functions + Modules Sudah Lebih dari Cukup

Alih-alih membuat satu class besar dengan banyak method, saya sekarang lebih suka memecah logika ke dalam fungsi-fungsi kecil dan mengelompokkannya dalam module (.py file).

Contohnya:

project/
│
├── math_utils.py
├── file_utils.py
└── main.py


Di math_utils.py:
def add(a, b):
    return a + b


def subtract(a, b):
    return a - b

Pendekatan ini:

  • Lebih modular
  • Mudah dibaca
  • Mudah dites
  • Tidak perlu instansiasi objek

Ini sangat “Pythonic”. Filosofi Python sendiri (Zen of Python) menekankan kesederhanaan dan keterbacaan.

Kalau sebuah fungsi tidak perlu menyimpan state kompleks, kenapa harus jadi method dalam class?

 

  1. Dataclasses & NamedTuple Menggantikan Class Data Kosong

Sering kali kita membuat class hanya untuk menyimpan data.

Contoh klasik:

class User:
    def __init__(self, name, age):
        self.name = name
        self.age = age

Padahal Python sudah menyediakan solusi yang jauh lebih bersih: dataclass.

from dataclasses import dataclass


@dataclass
class User:
    name: str
    age: int

Lebih pendek. Lebih jelas. Tidak perlu menulis __init__. Tidak perlu set atribut manual.

Atau bahkan lebih ringan lagi:

from collections import namedtuple


User = namedtuple("User", ["name", "age"])

Untuk class yang hanya menyimpan data tanpa logika kompleks, dataclass atau namedtuple adalah pilihan yang jauh lebih elegan.

 

  1. Closure & Higher-Order Functions Menggantikan Class Stateful

Kadang kita membuat class hanya untuk menyimpan satu state kecil.

Contoh:

class Multiplier:
    def __init__(self, factor):
        self.factor = factor


    def multiply(self, x):
        return x * self.factor

Padahal kita bisa melakukannya dengan closure:

def multiplier(factor):
    def multiply(x):
        return x * factor
    return multiply


times3 = multiplier(3)
print(times3(5))  # 15

Tidak ada class. Tidak ada instansiasi. Tidak ada atribut. Tapi tetap menyimpan state (factor).

Closure adalah fitur powerful di Python yang sering diremehkan. Dengan ini, kita bisa membuat fungsi yang “mengingat” nilai tertentu tanpa perlu membuat objek.

 

  1. Komposisi Lebih Fleksibel daripada Inheritance

Dalam OOP tradisional, kita sering menggunakan inheritance untuk memperluas perilaku.

Tapi inheritance bisa menjadi rumit:

  • Hierarki kelas panjang
  • Sulit dipahami
  • Sulit di-debug

Alternatifnya? Gunakan fungsi dan komposisi.

Contoh decorator sederhana:

def log_function(func):
    def wrapper(*args, **kwargs):
        print("Function is running")
        return func(*args, **kwargs)
    return wrapper

Ini adalah cara Pythonic untuk menambahkan perilaku tanpa inheritance.

 

  1. Kode Lebih Mudah Dites

Function-based design sering lebih mudah dites dibanding class-heavy design.

Contoh unit test untuk fungsi:

def add(a, b):
    return a + b

Test-nya sangat simpel:

  • Input → Output
  • Tidak perlu mock object
  • Tidak perlu setup state kompleks

Class sering memerlukan:

  • Setup object
  • Inisialisasi dependency
  • Mocking attribute

Semakin sederhana struktur kode, semakin mudah testing-nya.

 

  1. Lebih Mudah Dibaca dan Dipahami

Ketika membaca kode orang lain, struktur yang terlalu banyak class bisa membuat alur logika terasa tersembunyi.

Fungsi yang berdiri sendiri biasanya:

  • Jelas inputnya
  • Jelas outputnya
  • Tidak tergantung pada state tersembunyi

Python terkenal dengan keterbacaannya. Terlalu banyak class bisa mengurangi keunggulan itu.

 

  1. Performa dan Memory (Dalam Skala Tertentu)

Setiap object instance memiliki overhead memory. Untuk aplikasi kecil mungkin tidak terasa. Tapi dalam data processing skala besar, ribuan instance class bisa memberi dampak.

Function + dataclass ringan sering lebih efisien dibanding class kompleks dengan banyak method dan atribut tambahan.

 

  1. Kapan Saya Tetap Menggunakan Class?

Saya tidak anti-class. Saya tetap menggunakannya ketika memang tepat.

Contohnya:

1. Framework-Based Code

  • Django models
  • FastAPI dependencies
  • Pydantic models

Framework sering memang dirancang berbasis class.

2. Sistem Kompleks dengan Banyak State

Jika ada banyak interaksi antar state dan behavior, class memang masuk akal.

3. Inheritance & Polymorphism

Jika desain benar-benar membutuhkan hierarki perilaku, OOP tetap relevan.

Tapi di luar itu? Saya lebih sering menggunakan:

  • Functions
  • Modules
  • Dataclasses
  • Closures

 

Takeaway Besar: Python Bukan Java

Kesalahan terbesar saat belajar Python adalah membawanya dengan mindset Java.

Python tidak memaksa kamu menggunakan class untuk semuanya. Python memberi pilihan.

Dan sering kali, solusi paling sederhana adalah:

  • Fungsi kecil
  • Module terpisah
  • Data container ringan

Kode jadi:

  • Lebih pendek
  • Lebih bersih
  • Lebih mudah dirawat
  • Lebih Pythonic

 

Kesimpulan Akhir

Berhenti menggunakan class secara default bukan berarti meninggalkan OOP sepenuhnya. Ini tentang memilih alat yang tepat untuk masalah yang tepat.

Kalau problemnya sederhana, gunakan fungsi. Kalau hanya menyimpan data, gunakan dataclass. Kalau butuh state kecil, gunakan closure. Kalau sistemnya kompleks, barulah gunakan class.

Python itu fleksibel. Jangan membatasi diri pada satu paradigma saja. Karena pada akhirnya, kode yang baik bukan tentang mengikuti satu gaya tertentu—melainkan tentang membuat solusi yang jelas, sederhana, dan mudah dipahami.

Series: Python
  1. Pengertian dan Kegunaan Bahasa Pemrograman Python
  2. Phyton 1 : Tutorial Pengenalan Dasar
  3. Phyton 2 : Macam Penulisan Sintaks
  4. Phyton 3 : Konsep Variabel dan Data
  5. Phyton 4 - Cara Mengambil Input dan Output
  6. Phyton 5 : Jenis-jenis Operator
  7. Phyton 6 - Percabangan
  8. Phyton 7 - Perulangan
  9. Phyton 8 - Struktur Data List
  10. 4 Variasi Fungsi Print () Pada Phyton
  11. Tutorial Python: Struktur Data Dictionary
  12. Phyton 9 - Struktur Data Tuple
  13. Phyton 9 : Struktur Data Tuple Part 2
  14. 5 Variasi Coding Python dengan Fungsi Concatenate, Yuk, Coba
  15. PyScript: Masa Depan Python di Browser ?
  16. 7 Hal Dasar yang Harus Diketahui Tentang Dictionary pada Python
  17. Memahami Fungsi dan Prosedur pada Python
  18. 6 Proyek Coding Python untuk Meningkatkan Portofolio Anda
  19. Tutorial Python: Membaca dan Menulis File dengan Lebih Mendalam
  20. Cara Baca Dan Parse File CSV di Python
  21. 7 Teknik Membuat Dictionary di Python dengan Data dari Berbagai Sumber
  22. 5 Kesalahan Umum dalam Menggunakan Dictionary di Python dan Cara Menghindarinya
  23. Belajar Python: Proses Data JSON dari File dan API Web
  24. Belajar Python: Buat Fungsi Dengan Lambda Expression
  25. Apa Maksud dari *args dan kwargs pada Python?
  26. Tutorial Membuat 3 Jenis Kalkulator Dengan Python
  27. Panduan Lengkap: Cara Menghapus Item di List Python Tanpa Drama
  28. Cara Bangun Dashboard di Jupyter Pakai Solara
  29. 6 Perintah pip yang Harus Diketahui Setiap Developer Python
  30. Panduan Lengkap Menggunakan pip: Manajer Paket Python yang Wajib Dikuasai
  31. Rekomendasi 6 Framework Terbaik untuk Python: Dari Santai Sampai Superhero!
  32. Benar Nggak Sih Python Ramah untuk Programmer Pemula?
  33. Optimasi Performa Perbandingan Dokumen di Python: Ketika CPU Lo Kerja Rodi!
  34. Mengupas Tuntas Cara Mengiterasi Dictionary di Python: Panduan Lengkap yang Gak Bikin Pusing!
  35. 5 Proyek AI Seru yang Bisa Lo Bangun Weekend Ini dengan Python
  36. Rust vs Python: Duel Sengit Bahasa Pemrograman! Mana yang Cocok Buat Lo?
  37. 6 Trik Python Terbaru 2025 yang Wajib Dicoba Programmer
  38. Tutorial Lengkap Membuat News Aggregator Menggunakan Python
  39. Stop Nulis Function Python Kayak Gini, Bro!
  40. 7 Python Decorators yang Bikin Kode Lo Makin Canggih
  41. Trik Python debugging yang wajib lo coba.
  42. Membangun List di Python: Filosofi, Teknik, dan Tips Anti-Kudet
  43. DERET FAKTORIAL: SI "BAHAN VIRAL" MATEMATIKA YANG BIKIN KODE LO NAIK LEVEL!
  44. Project Python Seru: Bikin Script Otomatisasi Pengorganisir File (Biar Folder Download Nggak Kayak Gudang)
  45. Automating Email Sending Via Phyton – Biar Jempol Lo Pensiun Dini
  46. Project 2: Automating Web Scraping for Data Collection dengan Python
  47. Automatisasi Tugas GUI dengan PyAutoGUI
  48. Cara Lama vs Cara Kekinian: Belajar dataclass Python
  49. Automatisasi Laporan PDF dengan Python
  50. Membongkar Rahasia field() di Python: Kendali Penuh atas Dataclass
  51. Praktik Lanjutan Menulis Kode Python yang Bersih dan Ramah Pemula
  52. Python Function Annotations: Fitur Keren yang Sering Diremehkan, Padahal Bikin Kamu Terlihat Programmer Cerdas
  53. Python Keyword Arguments: Panduan Bad Boy Buat Programmer Biar Nggak Salah Urus Function
  54. Belajar Fungsi Tanpa Parameter Python dari Nol: Panduan Lengkap Buat Pemula Sampai Nyantol di Kepala
  55. Tutorial Coding: Keluar dari Plateau of False Competence di Python
  56. Plotting Graph Menggunakan Seaborn di Python
  57. Mutable vs Immutable Objects di Python: Konsep Dasar yang Sering Diremehkan
  58. Python time.sleep() – Cara Mudah Memberi Jeda pada Program Kamu
  59. Mengapa Saya Berhenti Menggunakan Class di Python (Dan Apa yang Saya Gunakan Sebagai Gantinya)
  60. Different Delay Time of Python sleep() – Mengatur Jeda Sesuai Kebutuhan Program
  61. Mengenal Python math Module: Panduan Lengkap untuk Operasi Matematika di Python
Published on May 15, 2026
Last updated on June 03, 2026

If you like this post and want to support us, you can support us via buymeacoffee or trakteer.