Memahami Penghias dalam Python
Penghias ialah corak reka bentuk yang membolehkan anda mengubah suai atau melanjutkan tingkah laku objek tanpa mengubah pelaksanaan asal objek. Dalam erti kata lain, penghias membenarkan anda menambah fungsi baharu pada objek sedia ada tanpa mengubah suai kod terasnya.
Penghias biasanya merupakan fungsi yang mengambil objek sebagai hujah dan mengembalikan objek baharu yang "membungkus" objek asal. Objek baharu mempunyai kaedah dan atribut yang sama seperti objek asal, tetapi ia juga mempunyai beberapa fungsi atau gelagat tambahan yang disediakan oleh penghias.
Sebagai contoh, katakan anda mempunyai kelas yang dipanggil `Kereta` yang mempunyai kaedah yang dipanggil `drive ()` yang membuatkan kereta itu bergerak. Anda boleh mencipta penghias yang dipanggil `SpeedLimitDecorator` yang mengubah suai kaedah `drive()` untuk mengehadkan kelajuan kereta. `SpeedLimitDecorator` akan mengambil objek `Kereta` asal sebagai hujah dan mengembalikan objek `Kereta` baharu yang mempunyai kaedah dan atribut yang sama seperti `Kereta` asal, tetapi dengan fungsi tambahan untuk mengehadkan kelajuan.
Berikut ialah contoh cara anda boleh menggunakan penghias dalam Python:
```
class Car:
def drive(self):
print("Kereta sedang memandu")
class SpeedLimitDecorator:
def __init__(self, car):
self. kereta = car
def drive(self):
self.car.drive()
print("Kereta kini terhad kepada 50 mph")
car = Kereta()
speed_limited_car = SpeedLimitDecorator(car)
speed_limited_car.drive() # cetakan "Kereta sedang memandu" dan "Kereta kini terhad kepada 50 mph"
```
Dalam contoh ini, kelas `SpeedLimitDecorator` mengambil objek `Kereta` sebagai hujah dalam pembinanya dan kemudian mengubah suai `drive( )` kaedah objek `Kereta` asal untuk mengehadkan kelajuannya. Kelas `SpeedLimitDecorator` juga mempunyai kaedah `drive()` sendiri yang memanggil kaedah `drive()` asal bagi objek yang dibalut, tetapi dengan had tambahan 50 mph.
Decorators ialah alat yang berkuasa untuk mengubah suai atau memanjangkan objek sedia ada tanpa mengubah pelaksanaan asalnya. Ia boleh digunakan untuk menambah kefungsian baharu, mengubah suai tingkah laku atau malah menggantikan bahagian pelaksanaan objek tanpa menjejaskan kod yang lain.



