Python - Penyandian: Panduan untuk Pemula
Hai di sana, penyihir Python masa depan! Hari ini, kita akan melompat ke atas dunia penyihir penyandian. Jangan khawatir jika perkataan itu terdengar seperti satu rakit penyembahan daripada Harry Potter - pada akhir pelajaran ini, kamu akan menggunakan konsep ini seperti seorang profesional!
Apakah Penyandian?
Penyandian adalah seperti memiliki rakit rahsia dengan kunci. Ia adalah satu cara untuk membundling data (masukan rakit) dan kaedah yang bekerja pada data tersebut (tindakan untuk menulis di rakit) ke atas satu unit tunggal, sementara juga mengawal akses kepada data tersebut. Di Python, kita mencapai ini menggunakan kelas.
Mari kita mula dengan satu contoh mudah:
class Rakit:
def __init__(self):
self.masukan = []
def tambah_masukan(self, masukan):
self.masukan.append(masukan)
def dapatkan_masukan(self):
return self.masukan
rakit_saya = Rakit()
rakit_saya.tambah_masukan("Dear Rakit, hari ini saya belajar tentang penyandian!")
print(rakit_saya.dapatkan_masukan())
Dalam contoh ini, Rakit
adalah kelas kami. Ia memiliki atribut privasi masukan
(kandungan rakit rahsia kita) dan dua kaedah untuk berinteraksi dengannya. Ini adalah penyandian dalam tindakan!
Pelaksanaan Penyandian di Python
Atribut Privasi
Di Python, kita menggunakan konvensyen untuk menambah awalan underscore pada atribut untuk menunjukkan mereka adalah privasi. Mari kemas kini kelas Rakit kami:
class Rakit:
def __init__(self):
self._masukan = [] # Catatunderscore
def tambah_masukan(self, masukan):
self._masukan.append(masukan)
def dapatkan_masukan(self):
return self._masukan.copy() # Kembalikan salinan untuk melindungi asal
rakit_saya = Rakit()
rakit_saya.tambah_masukan("Saya suka Python!")
print(rakit_saya.dapatkan_masukan())
# Ini akan berfungsi, tetapi tidak dianjurkan:
print(rakit_saya._masukan)
Underscore memberitahu penyprogram lain, "Hai, ini adalah privasi! Jangan sentuh secara langsung!" Tetapi di Python, ia adalah lebih seperti perjanjian seorang pria - kamu masih boleh mengaksesnya, tetapi kamu sepatutnya tidak.
Dekorator Properti
Untuk lebih banyak kawalan, kita boleh menggunakan dekorator properti. Mereka adalah seperti penyelamat penyihir untuk atribut kami:
class Rakit:
def __init__(self):
self._masukan = []
def tambah_masukan(self, masukan):
self._masukan.append(masukan)
@property
def masukan(self):
return self._masukan.copy()
rakit_saya = Rakit()
rakit_saya.tambah_masukan("Properti adalah kool!")
print(rakit_saya.masukan) # Ini berfungsi
# rakit_saya.masukan = [] # Ini akan memunculkan kesalahan
Dekorator @property
membolehkan kita mengakses masukan
seperti atribut, tetapi sebenarnya memanggil kaedah di belakang layar. Ini memberikan kita lebih banyak kawalan atas cara data diakses.
Setters dan Getters
Bila-bila masa, kita mahu membenarkan pengubahsuaian terkawal atas atribut kami. Masukkan setters:
class Rakit:
def __init__(self):
self._masukan = []
def tambah_masukan(self, masukan):
self._masukan.append(masukan)
@property
def masukan(self):
return self._masukan.copy()
@masukan.setter
def masukan(self, masukan_baru):
if isinstance(masukan_baru, list):
self._masukan = masukan_baru
else:
raise ValueError("Masukan mestilah dalam bentuk senarai")
rakit_saya = Rakit()
rakit_saya.masukan = ["Hari 1", "Hari 2"] # Ini berfungsi sekarang
print(rakit_saya.masukan)
rakit_saya.masukan = "Bukan senarai" # Ini akan memunculkan kesalahan
Sekarang kita boleh menetapkan masukan
secara langsung, tetapi hanya jika ia adalah senarai. Rakit kita menjadi sangat klasik!
Mengapa Menggunakan Penyandian?
- Perlindungan Data: Ia menghalang pengubahsuaian data secara kebetulan.
- Kesanggupan: Anda boleh mengubah implementasi dalaman tanpa mengganggu kod luar.
- Kawalan: Anda yang memutuskan cara data anda diakses dan diubahsuai.
Bayangkan jika siapa saja boleh untuk menyelerakan di rakit anda tanpa izin anda - kerosakan! Penyandian menjaga hal-hal yang beratur dan aman.
Teknik Penyandian Lanjutan
Name Mangling
Bila anda benar-benar mahu untuk menjaga hal-hal yang privat, Python menawarkan name mangling:
class SuperSecretRakit:
def __init__(self):
self.__ultra_private = "Rahsia saya yang paling dalam"
def reveal_secrets(self):
return self.__ultra_private
rakit = SuperSecretRakit()
print(rakit.reveal_secrets()) # Ini berfungsi
# print(rakit.__ultra_private) # Ini memunculkan kesalahan AttributeError
print(rakit._SuperSecretRakit__ultra_private) # Ini berfungsi, tetapi benar-benar tidak dianjurkan!
Twin underscore menyebabkan Python untuk "mangling" nama, membuatnya lebih sukar (tetapi bukan mustahil) untuk diakses dari luar kelas.
Penyandian dengan Properti
Mari kita cipta satu contoh yang lebih kompleks - akaun bank:
class BankAccount:
def __init__(self, initial_balance=0):
self._balance = initial_balance
@property
def balance(self):
return self._balance
@balance.setter
def balance(self, value):
if value < 0:
raise ValueError("Baki tidak boleh negatif")
self._balance = value
def deposit(self, amount):
if amount <= 0:
raise ValueError("Jumlah deposit mestilah positif")
self.balance += amount
def withdraw(self, amount):
if amount <= 0:
raise ValueError("Jumlah penarikan mestilah positif")
if amount > self.balance:
raise ValueError("Dana tidak mencukupi")
self.balance -= amount
account = BankAccount(1000)
print(account.balance) # 1000
account.deposit(500)
print(account.balance) # 1500
account.withdraw(200)
print(account.balance) # 1300
# account.balance = -500 # Ini akan memunculkan ValueError
Kelas BankAccount
menyandikan baki, memastikan ia tidak menjadi negatif dan bahawa deposit dan penarikan adalah sah.
Jadual Kaedah Penyandian
Kaedah | Keterangan | Contoh |
---|---|---|
Awalan Underscore | Menunjukkan atribut privasi | self._private_var |
Dekorator Properti | Mencipta getter untuk atribut | @property |
Dekorator Setter | Mencipta setter untuk properti | @attribute.setter |
Name Mangling | Mencipta atribut yang sangat privat | self.__very_private |
Kesimpulan
Penyandian adalah seperti menjadi penyelamat yang bertanggungjawab untuk data anda. Ia bukan tentang menjadi rahsia, tetapi tentang memastikan data anda diurus dengan penyusuhan dan niat. Apabila anda teruskan perjalanan Python anda, anda akan mendapati penyandian menjadi alat yang tak ternilai bagi membuat kod yang kuat dan dapat dipelihara.
Ingat, pemula Python, dengan kuasa besar datang tanggungjawab besar. Gunakan penyandian dengan bijak, dan kod anda akan berterima kasih kepada anda!
Sekarang, lakukan penyandian! Dan jangan lupa untuk menulis di rakit (yang terpelihara dengan baik) anda tentang semua yang kool yang anda belajar tentang Python. Selamat coding!
Credits: Image by storyset