Python - Refleksi

Helo di sana, ahli penyihir Python masa depan! Hari ini, kita akan melakukan perjalanan yang menarik ke atas dunia penyihir Python refleksi. Jangan khawatir jika anda belum pernah mendengar tentang refleksi sebelum ini - pada akhir tutorial ini, anda akan melakukan refleksi seperti profesional! Jadi, rakamkan papan tik anda (saya maksudkan, papan ketik), dan mari kita melompat masuk!

Python - Reflection

Apa itu Refleksi?

Sebelum kita mula, mari kita faham apa itu refleksi. Dalam pemrograman, refleksi adalah seperti memiliki cermin yang membolehkan program untuk memeriksa, mengintrospektif, dan mengubah struktur dan tingkah laku sendiri pada saat runtime. Ia seperti memberikan kod anda keupayaan untuk melihat dirinya sendiri dan berkata, "Hai, apa yang membuatkan saya?" cukup keren, kan?

Fungsi type()

Mari kita mula dengan fungsi type(). Ini adalah seperti bertanya kepada objek, "Apakah jenis kamu?"

# Contoh 1: Menggunakan type()
x = 5
y = "Helo"
z = [1, 2, 3]

print(type(x))  # Output: <class 'int'>
print(type(y))  # Output: <class 'str'>
print(type(z))  # Output: <class 'list'>

Dalam contoh ini, kita bertanya kepada variabel yang berbeza jenis apa mereka. Fungsi type() memberitahu kita bahwa x adalah integer, y adalah rentetan, dan z adalah senarai. Ia seperti melakukan perbualan dengan variabel anda!

Fungsi isinstance()

Berikutnya adalah isinstance(). Fungsi ini adalah seperti bertanya, "Adakah kamu sebahagian daripada keluarga ini?"

# Contoh 2: Menggunakan isinstance()
x = 5
y = "Helo"

print(isinstance(x, int))    # Output: True
print(isinstance(y, str))    # Output: True
print(isinstance(x, str))    # Output: False

Di sini, kita memeriksa jika x adalah contoh bagi int (yang ianya), jika y adalah contoh bagi str (yang ianya), dan jika x adalah contoh bagi str (yang ianya bukan). Ia seperti bertanya kepada seseorang jika mereka adalah ahli club tertentu!

Fungsi issubclass()

Bergerak ke issubclass(). Ini adalah seperti bertanya, "Adakah kamu berkaitan dengan keluarga ini?"

# Contoh 3: Menggunakan issubclass()
class Animal:
pass

class Dog(Animal):
pass

print(issubclass(Dog, Animal))  # Output: True
print(issubclass(Animal, Dog))  # Output: False

Dalam contoh ini, kita memeriksa jika Dog adalah subkelas bagi Animal (yang ianya), dan jika Animal adalah subkelas bagi Dog (yang ianya bukan). Ia seperti bertanya jika poodle adalah jenis anjing, versus bertanya jika semua anjing adalah poodle!

Fungsi callable()

Sekarang, mari kita bercakap tentang callable(). Fungsi ini memeriksa jika objek boleh dipanggil (seperti fungsi).

# Contoh 4: Menggunakan callable()
def greet():
print("Helo!")

x = 5

print(callable(greet))  # Output: True
print(callable(x))      # Output: False

Di sini, kita memeriksa jika greet (yang adalah fungsi) boleh dipanggil, dan jika x (yang hanya adalah nombor) boleh dipanggil. Ia seperti bertanya, "Bolehkah saya gunakan kamu sebagai fungsi?"

Fungsi getattr()

getattr() adalah seperti cara yang sopan untuk meminta atribut salah satu objek.

# Contoh 5: Menggunakan getattr()
class Person:
name = "Alice"
age = 30

p = Person()
print(getattr(p, "name"))  # Output: Alice
print(getattr(p, "job", "Tidak Bekerja"))  # Output: Tidak Bekerja

Dalam contoh ini, kita meminta objek Person kami untuk atribut name dia punya. Kita juga meminta atribut job dia tidak punya, jadi kita memberikan nilai lalai "Tidak Bekerja".

Fungsi setattr()

setattr() adalah seperti memberikan objek atribut baru atau mengubah atribut yang ada.

# Contoh 6: Menggunakan setattr()
class Car:
color = "merah"

my_car = Car()
print(my_car.color)  # Output: merah

setattr(my_car, "color", "biru")
print(my_car.color)  # Output: biru

setattr(my_car, "brand", "Toyota")
print(my_car.brand)  # Output: Toyota

Di sini, kita mengubah color kereta kita dari merah menjadi biru, dan kemudian memberikan ia atribut brand baru.

Fungsi hasattr()

hasattr() adalah seperti bertanya kepada objek, "Adakah kamu ada atribut ini?"

# Contoh 7: Menggunakan hasattr()
class Book:
title = "Python for Beginners"
pages = 200

my_book = Book()
print(hasattr(my_book, "title"))   # Output: True
print(hasattr(my_book, "author"))  # Output: False

Dalam contoh ini, kita memeriksa jika objek Book kita ada atribut title (yang ianya) dan atribut author (yang ianya tidak).

Fungsi dir()

Akhirnya, mari kita lihat dir(). Fungsi ini adalah seperti bertanya kepada objek, "Apa yang kamu boleh lakukan?"

# Contoh 8: Menggunakan dir()
class Dog:
def __init__(self, name):
self.name = name

def bark(self):
print("Woof!")

my_dog = Dog("Buddy")
print(dir(my_dog))

Ini akan menghasilkan senarai semua atribut dan metode objek Dog kita, termasuk name dan bark, serta beberapa atribut terbina-dalam yang semua objek ada.

Ringkasan Fungsi Refleksi

Berikut adalah ringkasan semua fungsi refleksi yang kita pelajari:

Fungsi Tujuan
type() Mengembalikan jenis objek
isinstance() Memeriksa jika objek adalah contoh kelas yang dinyatakan
issubclass() Memeriksa jika kelas adalah subkelas dari kelas lain
callable() Memeriksa jika objek boleh dipanggil (seperti fungsi)
getattr() Mendapatkan nilai atribut objek
setattr() Menetapkan nilai atribut objek
hasattr() Memeriksa jika objek memiliki atribut khusus
dir() Mengembalikan senarai atribut dan metode objek

Dan itu adalah semua, rakan-rakan! Anda baru saja melakukan langkah pertama anda ke atas dunia Python refleksi. Ingat, alat ini adalah seperti melakukan perbualan dengan kod anda. Mereka membolehkan program anda untuk memeriksa diri mereka sendiri dan membuat keputusan berdasarkan apa yang mereka temui. Ia adalah fitur yang kuat yang dapat membuat kod anda lebih fleksibel dan dinamik.

Sebagai anda teruskan perjalanan Python anda, anda akan menemukan banyak cara lagi untuk menggunakan refleksi untuk membuat program yang lebih pintar dan lebih lincah. Teruskan untuk berlatih, teruskan untuk menjelajahi, dan yang paling penting, teruskan untuk bersenang-senang dengan Python!

Credits: Image by storyset