Traffine I/O

Bahasa Indonesia

2023-02-17

Pythonにおけるクラスの概要

Pengenalan ke Kelas Python

Kelas dalam Python adalah konsep fundamental dari pemrograman berorientasi objek. Kelas digunakan untuk mendefinisikan tipe data yang mencakup atribut data dan metode.

Sebuah kelas dapat membuat beberapa instance, dan setiap instance dapat memiliki atributnya sendiri. Misalnya, Anda dapat menentukan kelas Manusia dan setiap instance dapat memiliki atribut seperti nama, usia, tinggi, berat badan, dan sebagainya.

Kelas Python memanfaatkan manfaat dari pemrograman berorientasi objek untuk membuat kode yang lebih efisien dan dapat digunakan kembali. Mereka juga mendukung konsep pewarisan dan polimorfisme, yang bermanfaat untuk membuat program yang kompleks.

Kelas Python didefinisikan oleh nama kelas, tubuh yang mencakup atribut data dan metode, dan dapat membuat instance dari kelas dengan akses ke atribut data.

Memahami kelas Python adalah keterampilan yang penting bagi pengembang Python dan merupakan konsep fundamental dalam pemrograman berorientasi objek.

Mendefinisikan Kelas di Python

Mendefinisikan kelas di Python merupakan aspek penting dalam pemrograman berorientasi objek. Ini berarti mengelompokkan atribut data dan metode yang bertindak pada atribut tersebut untuk mendefinisikan jenis data baru. Dengan menggunakan kelas, Anda dapat mendefinisikan struktur data yang kompleks yang dapat digunakan di seluruh program.

Untuk mendefinisikan kelas di Python, gunakan kata kunci class, nama kelas, dan tanda titik dua (:). Misalnya, untuk mendefinisikan kelas dengan nama Person, gunakan sintaks berikut:

python
class Person:
    pass

Kata kunci pass adalah placeholder dan menunjukkan bahwa tidak ada kode yang ditambahkan ke dalam definisi kelas. Anda dapat menambahkan atribut kelas dan metode ke dalam blok kelas untuk menentukan perilaku kelas.

Untuk menambahkan atribut data ke dalam kelas, definisikan atribut tersebut di dalam blok kelas. Misalnya, untuk menambahkan atribut name, gunakan sintaks berikut:

python
class Person:
    def __init__(self, name):
        self.name = name

Di sini, metode __init__ adalah metode khusus yang dipanggil ketika instance kelas dibuat. Parameter self merujuk pada instance kelas yang dibuat, sedangkan parameter name digunakan untuk menginisialisasi atribut name pada instance.

Anda juga dapat menentukan perilaku kelas dengan menambahkan metode ke dalam blok kelas. Misalnya, untuk menentukan metode greet yang mencetak pesan salam, gunakan sintaks berikut:

python
class Person:
    def __init__(self, name):
        self.name = name

    def greet(self):
        print(f"Halo, nama saya {self.name}")

Di sini, metode greet mengambil parameter self, yang merujuk pada instance kelas yang memanggil metode. Metode kemudian mencetak pesan salam dengan menggunakan atribut name dari instance.

Secara keseluruhan, untuk mendefinisikan kelas di Python, gunakan kata kunci class, nama kelas, dan tanda titik dua (:), lalu tambahkan atribut data dan metode ke dalam blok kelas. Dengan menggunakan kelas, Anda dapat mendefinisikan struktur data yang kompleks dan dapat digunakan di seluruh program.

Atribut dan Metode

Atribut dan metode adalah dua komponen penting dari sebuah kelas yang membantu mendefinisikan perilaku dan propertinya.

Atribut

Atribut adalah properti atau karakteristik dari sebuah objek yang mendefinisikan keadaannya. Mereka didefinisikan di dalam kelas dan dapat diakses dan dimodifikasi melalui objek dari kelas tersebut. Atribut dapat digolongkan menjadi dua jenis: atribut instance dan atribut kelas.

Atribut instance adalah unik untuk setiap objek yang dibuat dari kelas, sedangkan atribut kelas dibagi oleh semua instance dari kelas. Atribut instance biasanya didefinisikan di dalam metode konstruktor kelas, sedangkan atribut kelas didefinisikan di luar metode dan biasanya digunakan untuk menentukan nilai default atau konstan.

Sebagai contoh, pertimbangkan kode berikut:

python
class Car:
    # Class attribute
    car_type = "Sedan"

    # Constructor method
    def __init__(self, make, model, year):
        # Instance attributes
        self.make = make
        self.model = model
        self.year = year

Dalam contoh ini, car_type adalah atribut kelas, sedangkan make, model, dan year adalah atribut instance.

Metode

Metode adalah fungsi yang didefinisikan di dalam sebuah kelas dan digunakan untuk mendefinisikan perilaku dari objek yang dibuat dari kelas tersebut. Metode dapat digolongkan menjadi dua jenis: metode instance dan metode kelas.

Metode instance adalah metode yang beroperasi pada sebuah instance dari kelas, dan mereka dapat mengakses dan memodifikasi atribut instance dari objek tersebut. Argumen pertama dari metode instance selalu self, yang mengacu pada objek di mana metode tersebut dipanggil.

Metode kelas adalah metode yang beroperasi pada kelas itu sendiri, dan mereka dapat mengakses dan memodifikasi atribut kelas dari kelas tersebut. Argumen pertama dari metode kelas selalu cls, yang mengacu pada kelas di mana metode tersebut dipanggil.

Sebagai contoh, pertimbangkan kode berikut:

python
class Car:
    # Class attribute
    car_type = "Sedan"

    # Constructor method
    def __init__(self, make, model, year):
        # Instance attributes
        self.make = make
        self.model = model
        self.year = year

    # Instance method
    def get_make_model(self):
        return f"{self.make} {self.model}"

    # Class method
    @classmethod
    def set_car_type(cls, car_type):
        cls.car_type = car_type

Dalam contoh ini, get_make_model() adalah metode instan yang mengembalikan merek dan model dari objek mobil, sedangkan set_car_type() adalah metode kelas yang menetapkan atribut kelas car_type untuk semua instance dari kelas Car.

Sebagai kesimpulan, atribut dan metode adalah komponen penting dari sebuah kelas di Python yang membantu menentukan perilaku dan properti kelas tersebut. Memahami cara menggunakannya secara efektif dapat membantu Anda menulis kode berorientasi objek yang lebih efisien dan kuat.

Parameter 'self' pada Kelas Python

Dalam kelas Python, parameter self adalah referensi ke instance kelas. Parameter ini digunakan sebagai parameter pertama untuk semua metode, termasuk konstruktor __init__(). Dengan menggunakan parameter self, instance dapat mengakses dan memodifikasi atribut dan metode miliknya sendiri.

Sebagai contoh, pertimbangkan kelas berikut:

python
class Dog:
    def __init__(self, name, breed):
        self.name = name
        self.breed = breed

    def bark(self):
        print(f"{self.name} ({self.breed}) menggonggong!")

Dalam contoh ini, konstruktor __init__() menerima dua parameter, yaitu name dan breed. Ketika sebuah instance kelas Dog dibuat, parameter self merujuk pada instance tertentu tersebut, dan parameter name dan breed digunakan untuk mengatur atribut instance tersebut.

Metode bark() juga menerima parameter self, yang memungkinkan untuk mengakses atribut name dan breed dari instance tertentu dan mencetak pesan yang sesuai.

Nama self hanyalah konvensi, dan dapat diganti dengan nama variabel yang valid lainnya. Namun, mengikuti konvensi dianggap sebagai praktik yang disarankan untuk menghindari kebingungan.

Secara keseluruhan, parameter self adalah cara bagi instance kelas untuk mengakses dan memanipulasi atribut dan metodenya sendiri, dan merupakan elemen penting dari pemrograman berorientasi objek Python.

Membuat Objek dari Kelas

Di Python, kelas adalah cetakan untuk membuat objek, dan objek adalah instance dari kelas. Untuk membuat objek dari kelas, kita perlu memanggil kelas dan memberikan argumen yang dibutuhkan ke konstruktor kelas. Berikut adalah contohnya.

python
class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year

my_car = Car("Toyota", "Camry", 2022)

Contoh di atas mendefinisikan kelas bernama Car. Kelas ini memiliki metode konstruktor yang disebut __init__(), yang mengambil tiga argumen yaitu make, model, dan year. Di dalam konstruktor, nilai dari variabel instance make, model, dan year diatur.

Untuk membuat objek dari kelas Car, kita cukup memanggil kelas dengan memberikan argumen yang dibutuhkan ke konstruktor. Contohnya, kita dapat membuat objek Car baru dan menugaskannya ke variabel my_car dengan cara my_car = Car("Toyota", "Camry", 2022).

Dengan cara ini, kita dapat menggunakan notasi titik untuk mengakses variabel dan metode objek my_car. Sebagai contoh, kita dapat menuliskan kode seperti ini:

python
print(my_car.make)
print(my_car.model)
print(my_car.year)

Maka outputnya akan menjadi:

bash
Toyota
Camry
2022

Secara keseluruhan, membuat objek dari kelas adalah konsep dasar dalam pemrograman berorientasi objek di Python dan memungkinkan kita untuk mendefinisikan struktur data yang kompleks dengan perilaku yang dapat digunakan di seluruh program.

Metode Khusus pada Kelas Python

Di Python, kelas dapat memiliki metode khusus, juga dikenal sebagai metode ajaib atau metode dunder (pendekatan "double underscore"), yang menentukan bagaimana instance dari kelas tersebut berperilaku dalam situasi tertentu. Metode khusus ini memiliki awalan dan akhiran dua garis bawah, seperti __init__, __str__, __add__, dan lain sebagainya.

Berikut beberapa metode khusus yang umum digunakan dalam kelas Python:

  • __init__(self, ...)
    Ini adalah metode konstruktor yang menginisialisasi instance baru dari kelas dengan argumen yang diberikan.

  • __str__(self)
    Metode ini mengembalikan representasi string dari instance. Ini digunakan ketika Anda menggunakan fungsi str() atau print() pada instance.

  • __repr__(self)
    Metode ini mengembalikan representasi string dari instance yang dapat digunakan untuk membuat ulang instance. Ini digunakan ketika Anda menggunakan fungsi repr() pada instance.

  • __len__(self)
    Metode ini mengembalikan panjang instance. Ini digunakan ketika Anda menggunakan fungsi len() pada instance.

  • __eq__(self, other)
    Metode ini memeriksa apakah instance sama dengan instance lainnya. Ini digunakan ketika Anda menggunakan operator == pada instance.

  • __lt__(self, other)
    Metode ini memeriksa apakah instance kurang dari instance lainnya. Ini digunakan ketika Anda menggunakan operator < pada instance.

Berikut contoh kelas dengan metode khusus:

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

    def __str__(self):
        return f"Rectangle({self.width}, {self.height})"

    def __repr__(self):
        return f"Rectangle({self.width}, {self.height})"

    def __eq__(self, other):
        return self.width == other.width and self.height == other.height

    def area(self):
        return self.width * self.height

Pada contoh ini, kelas Rectangle memiliki metode khusus __init__, __str__, __repr__, dan __eq__. Metode __str__ dan __repr__ mengembalikan representasi string dari instance, sedangkan metode __eq__ memeriksa apakah dua instance sama.

Menggunakan metode khusus dalam kelas dapat membuat kode Anda lebih mudah dibaca dan intuitif, serta memungkinkan instance dari kelas Anda berperilaku seperti tipe data bawaan.

Kelas Warisan dan Polimorfisme

Kelas warisan (inheritance) dan polimorfisme (polymorphism) adalah dua konsep penting dalam pemrograman berorientasi objek yang memungkinkan penggunaan ulang kode dan fleksibilitas. Dalam Python, kelas dapat mewarisi properti dan metode dari kelas induk (parent classes), dan juga dapat mengganti atau memperpanjang properti dan metode tersebut untuk membuat perilaku yang lebih khusus.

Kelas Warisan

Kelas warisan memungkinkan Anda untuk membuat kelas baru yang merupakan versi modifikasi dari kelas yang sudah ada. Kelas baru, disebut kelas turunan (subclass or derived class), mewarisi semua properti dan metode kelas induk, disebut kelas super atau base class. Kelas turunan kemudian dapat menambahkan properti dan metode baru atau memodifikasi properti dan metode yang diwarisi sesuai kebutuhan.

Berikut adalah contoh dari kelas warisan:

python
class Animal:
    def __init__(self, name, species):
        self.name = name
        self.species = species

    def speak(self):
        print(f"{self.name} is speaking.")

class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name, "dog")
        self.breed = breed

    def speak(self):
        print(f"{self.name} barks.")

Pada contoh di atas, terdapat kelas induk Animal dengan metode init dan metode speak. Kemudian kita membuat kelas turunan Dog yang mewarisi kelas Animal menggunakan sintaks class Dog(Animal):. Kita mengganti metode init untuk menambahkan atribut baru yaitu breed dan mengganti metode speak untuk mencetak "barks" daripada "speaking".

Polimorfisme

Polimorfisme mengacu pada kemampuan objek untuk mengambil banyak bentuk. Dalam konteks kelas, ini berarti bahwa objek kelas turunan dapat digunakan di mana saja objek kelas induk diharapkan. Ini memungkinkan kode yang lebih fleksibel dan modular.

Berikut adalah contoh dari polimorfisme:

python
def make_animal_speak(animal):
    animal.speak()

animal1 = Animal("Bob", "cat")
dog1 = Dog("Rex", "Labrador")

make_animal_speak(animal1)
make_animal_speak(dog1)

Pada contoh di atas, kita mendefinisikan sebuah fungsi make_animal_speak yang mengambil argumen tipe Animal dan memanggil metode speak-nya. Kemudian kita membuat sebuah instance dari Animal dan sebuah instance dari Dog dan melewatkan keduanya ke fungsi tersebut. Karena Dog adalah subclass dari Animal, maka dapat dilewatkan ke fungsi tanpa masalah. Ini adalah contoh dari polimorfisme yang bekerja.

Secara keseluruhan, kelas warisan dan polimorfisme adalah konsep yang sangat kuat dalam pemrograman berorientasi objek yang dapat membantu Anda menulis kode yang lebih fleksibel dan dapat digunakan ulang.

super()

Fungsi super() dalam Python digunakan untuk memanggil metode pada kelas induk dari kelas turunan. Ini berguna ketika Anda ingin mengganti metode pada kelas induk tetapi masih ingin menggunakan beberapa fungsionalitasnya.

Syntax untuk memanggil metode dari superclass adalah super().nama_metode(). Berikut adalah contohnya:

python
class Parent:
    def __init__(self, name):
        self.name = name

    def greet(self):
        print(f"Hello, my name is {self.name}.")


class Child(Parent):
    def greet(self):
        super().greet()
        print("I am a child.")

child = Child("Alice")
child.greet()

Pada contoh di atas, kita memiliki dua kelas: Parent dan Child. Child adalah subclass dari Parent, dan ia mengganti metode greet() pada Parent. Namun, ia masih memanggil metode greet() pada Parent menggunakan super().greet().

Output dari kode di atas adalah:

python
Hello, my name is Alice.
I am a child.

Seperti yang Anda lihat, kelas Child pertama-tama memanggil metode greet() pada kelas Parent menggunakan super().greet(), yang mencetak sapaan dengan nama dari instance. Kemudian, ia menambahkan pesan sendiri pada keluaran.

Fitur lain yang berguna dari super() adalah ia memungkinkan Anda untuk memanggil metode dalam kelas tertentu dalam hierarki warisan. Misalnya, jika Anda memiliki beberapa kelas induk, Anda dapat menggunakan super() untuk memanggil metode dalam kelas induk tertentu:

python
class Parent1:
    def method(self):
        print("Parent1 method called.")


class Parent2:
    def method(self):
        print("Parent2 method called.")


class Child(Parent1, Parent2):
    def method(self):
        super(Parent1, self).method()

child = Child()
child.method()

Pada contoh ini, terdapat tiga kelas: Parent1, Parent2, dan Child. Child adalah subclass dari kedua Parent1 dan Parent2, dan ia menimpa metode method() dari Parent1. Namun, ia memanggil metode method() dari Parent1 menggunakan super(Parent1, self).method(), sehingga mencetak "Parent1 method called."

Keluaran dari kode di atas adalah:

python
Parent1 method called.

Secara keseluruhan, fungsi super() dalam Python adalah alat yang berguna untuk memanggil metode dalam kelas induk dari subclass. Ia memungkinkan Anda untuk menimpa metode sambil tetap menggunakan beberapa fungsi kelas induk.

Praktik Terbaik untuk Menggunakan Kelas di Python

Kelas adalah konsep fundamental dalam pemrograman berorientasi objek (OOP), dan Python membuatnya mudah untuk membuat dan menggunakan kelas. Dalam artikel ini, saya akan membahas praktik terbaik untuk menggunakan kelas dalam Python, yang akan membantu Anda menulis kode yang bersih, efisien, dan mudah dipelihara.

  • Gunakan nama kelas dan metode yang bermakna: Penting untuk menggunakan nama yang deskriptif dan bermakna untuk kelas dan metode Anda. Hal ini akan membuat kode Anda lebih mudah dibaca dan dipahami. Hindari menggunakan nama variabel satu karakter atau singkatan yang sulit didekripsi.

  • Ikuti panduan gaya PEP 8: Panduan gaya PEP 8 menyediakan pedoman untuk konvensi penulisan kode dalam Python. Mengikuti panduan ini akan membuat kode Anda lebih konsisten dan mudah dibaca. Misalnya, gunakan huruf kecil dengan garis bawah untuk nama kelas, dan gunakan CamelCase untuk nama metode.

  • Gunakan metode init untuk inisialisasi: Metode init adalah konstruktor yang dipanggil saat Anda membuat instance dari sebuah kelas. Gunakan metode ini untuk menginisialisasi keadaan dan atribut objek.

  • Gunakan warisan (inheritance) jika sesuai: Warisan adalah fitur yang kuat dalam OOP yang memungkinkan Anda membuat kelas baru berdasarkan kelas yang sudah ada. Gunakan warisan jika Anda perlu membuat kelas baru yang berbagi properti dan perilaku dari kelas yang sudah ada.

  • Pertahankan metode Anda kecil dan terfokus: Metode harus kecil dan terfokus, dengan satu tanggung jawab. Hal ini membuat kode Anda lebih modular dan lebih mudah dipahami. Jika metode menjadi terlalu panjang atau kompleks, pertimbangkan untuk merombaknya menjadi metode yang lebih kecil.

  • Hindari penggunaan variabel global: Variabel global dapat membuat kode Anda lebih sulit dipahami dan dipelihara. Sebagai gantinya, gunakan variabel instance atau variabel kelas untuk menyimpan data yang perlu dibagi di antara metode-metode.

  • Gunakan docstring untuk mendokumentasikan kelas dan metode Anda: Docstring adalah cara untuk mendokumentasikan kode Anda di dalam kode itu sendiri. Gunakan docstring untuk menjelaskan apa yang dilakukan oleh kelas dan metode Anda, serta memberikan contoh cara menggunakannya.

Referensi

https://www.geeksforgeeks.org/python-classes-and-objects/
https://www.programiz.com/python-programming/class
https://realpython.com/python3-object-oriented-programming/
https://www.w3schools.com/python/python_classes.asp

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!