Python - Atribut Kelas

Halo, pemrogram aspiran! Hari ini, kita akan memasuki dunia yang menarik tentang atribut kelas Python. Jangan khawatir jika Anda baru mengenal pemrograman; saya akan memandu Anda melalui perjalanan ini langkah demi langkah, sama seperti yang saya lakukan untuk banyak siswa selama tahun-tahun pengajaran saya. Jadi, mari kita mulai!

Python - Class Attributes

Atribut Kelas (Variabel)

Atribut kelas adalah variabel yang milik seluruh kelas, bukan hanya sebuah instance khusus dari kelas. Pilihannya sebagai karakteristik yang dibagi oleh semua objek dari kelas tersebut.

Mari kita mulai dengan contoh sederhana:

class Dog:
species = "Canis familiaris"

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

fluffy = Dog("Fluffy", 3)
buddy = Dog("Buddy", 5)

print(Dog.species)  # Output: Canis familiaris
print(fluffy.species)  # Output: Canis familiaris
print(buddy.species)  # Output: Canis familiaris

Dalam contoh ini, species adalah sebuah atribut kelas. Itu didefinisikan langsung di dalam kelas, tetapi di luar semua metode. Semua objek Dog memiliki atribut ini.

Mengakses Atribut Kelas

Seperti yang dapat Anda lihat dari contoh di atas, Anda dapat mengakses atribut kelas dengan dua cara:

  1. Melalui kelas itu sendiri: Dog.species
  2. Melalui setiap instance dari kelas: fluffy.species atau buddy.species

Kedua cara tersebut akan memberikan hasil yang sama. Hal ini seperti bertanya, "Apakah spesies anjing?" atau "Apakah spesies Fluffy?" - jawabannya adalah sama!

Mengubah Atribut Kelas

Atribut kelas dapat diubah, tetapi hati-hati! Ketika Anda mengubah sebuah atribut kelas, itu akan berubah untuk semua instance dari kelas. Mari kita lihat contoh:

class Cat:
species = "Felis catus"
count = 0

def __init__(self, name):
self.name = name
Cat.count += 1

whiskers = Cat("Whiskers")
mittens = Cat("Mittens")

print(Cat.count)  # Output: 2
print(whiskers.count)  # Output: 2
print(mittens.count)  # Output: 2

Cat.species = "Felis silvestris catus"

print(Cat.species)  # Output: Felis silvestris catus
print(whiskers.species)  # Output: Felis silvestris catus
print(mittens.species)  # Output: Felis silvestris catus

Dalam contoh ini, kita menggunakan sebuah atribut kelas count untuk melacak berapa banyak kucing yang telah kita buat. Setiap kali kita membuat sebuah objek Cat baru, kita menambahkan Cat.count. Kita juga mengubah species untuk semua kucing sekaligus dengan mengubah Cat.species.

Signifikasi Atribut Kelas

Atribut kelas sangat berguna dalam beberapa skenario:

  1. Menyimpan konstanta yang harus sama untuk semua instance dari sebuah kelas.
  2. Melacak data di seluruh instance dari sebuah kelas (seperti contoh kita Cat.count).
  3. Mendefinisikan nilai default yang dapat diubah jika diperlukan oleh instance.

Atribut Kelas Built-In

Kelas Python datang dengan beberapa atribut built-in yang dapat sangat membantu. Mari kita lihat beberapa:

class MyClass:
x = 5

def my_method(self):
pass

print(MyClass.__name__)  # Output: MyClass
print(MyClass.__doc__)  # Output: None (karena kita tidak menyediakan sebuah docstring)
print(MyClass.__dict__)  # Output: {'__module__': '__main__', 'x': 5, 'my_method': <function MyClass.my_method at ...>}
print(MyClass.__module__)  # Output: __main__

Mengakses Atribut Built-In Kelas

Berikut adalah tabel dari beberapa atribut built-in umum dan cara mengakses mereka:

Atribut Deskripsi Akses
name Nama kelas MyClass.name
doc Docstring kelas MyClass.doc
dict Dictionary yang berisi namespace kelas MyClass.dict
module Nama modul di mana kelas didefinisikan MyClass.module
bases Tuple yang berisi kelas dasar MyClass.bases

Atribut Instance

Sekarang bahwa kita mengerti atribut kelas, mari kita singkatkan tentang atribut instance untuk melihat perbedaan. Atribut instance adalah spesifik untuk setiap objek yang dibuat dari kelas.

class Student:
school = "Python High"  # Atribut kelas

def __init__(self, name, grade):
self.name = name  # Atribut instance
self.grade = grade  # Atribut instance

alice = Student("Alice", 10)
bob = Student("Bob", 11)

print(Student.school)  # Output: Python High
print(alice.school)    # Output: Python High
print(bob.school)      # Output: Python High

print(alice.name)      # Output: Alice
print(bob.name)        # Output: Bob

Student.school = "Python University"
print(alice.school)    # Output: Python University
print(bob.school)      # Output: Python University

alice.school = "Python Elementary"
print(alice.school)    # Output: Python Elementary
print(Student.school)  # Output: Python University
print(bob.school)      # Output: Python University

Atribut Instance Vs Atribut Kelas

Perbedaan utama antara atribut instance dan atribut kelas adalah:

  1. Atribut kelas adalah dibagi oleh semua instance, sementara atribut instance adalah unik untuk setiap instance.
  2. Atribut kelas didefinisikan di dalam kelas tetapi di luar semua metode, sementara atribut instance biasanya didefinisikan di dalam metode __init__.
  3. Mengubah sebuah atribut kelas akan mempengaruhi semua instance (kecuali instance memiliki atribut yang menimpa itu), sementara mengubah sebuah atribut instance hanya akan mempengaruhi instance tersebut.

Ingat, ketika Anda mencoba mengakses sebuah atribut pada sebuah instance, Python pertama-tama mencari sebuah atribut instance. Jika tidak ditemukan, maka ia mencari sebuah atribut kelas. Itu adalah alasan mengapa kita dapat "menimpa" sebuah atribut kelas untuk sebuah instance tertentu dengan membuat sebuah atribut instance dengan nama yang sama.

Dan itu adalah! Anda baru saja menyelesaikan sebuah kelas singkat tentang atribut kelas Python. Ingat, kunci untuk menguasai pemrograman adalah praktek. Jadi jangan takut untuk bereksperimen dengan konsep ini. Buat kelas Anda sendiri, mainkan dengan atribut, dan lihat apa yang terjadi. Selamat coding!

Credits: Image by storyset