Encapsulation adalah prinsip asas pengaturcaraan berorientasikan objek (OOP) yang melibatkan data bundling (atribut) dan kaedah (fungsi) yang beroperasi pada data tersebut dalam satu unit, atau kelas. Di Python, enkapsulasi membantu menyembunyikan butiran dalaman bagaimana objek berfungsi dan menyekat akses langsung ke beberapa komponen objek. Ini boleh dicapai menggunakan pembolehubah swasta dan dilindungi (ditunjukkan dengan awalan underscore tunggal atau berganda, masing -masing). Encapsulation menggalakkan modulariti dan menjadikannya lebih mudah untuk mengubah satu bahagian kod tanpa menjejaskan bahagian lain.
Warisan adalah satu lagi konsep utama dalam OOP yang membolehkan kelas baru (dipanggil yang diperoleh atau subclass) untuk mewarisi atribut dan kaedah dari kelas sedia ada (dikenali sebagai asas atau superclass). Ciri ini membolehkan penggunaan semula kod dan penubuhan hubungan hierarki di kalangan kelas. Di Python, kelas boleh mewarisi dari pelbagai kelas asas (pelbagai warisan). Warisan membantu dalam mewujudkan asas kod yang lebih teratur dan terkawal, kerana fungsi biasa dapat ditakrifkan dalam kelas asas dan tingkah laku khusus dalam subkelas.
Polimorfisme merujuk kepada keupayaan objek yang berbeza untuk dianggap sebagai contoh kelas yang sama melalui antara muka yang sama. Di Python, ini sering dicapai melalui kaedah yang mengatasi (di mana subclass menyediakan pelaksanaan khusus kaedah yang telah ditakrifkan dalam superclass) dan kaedah overloading (di mana versi yang berbeza dari satu kaedah boleh dipanggil bergantung pada jenis dan bilangan argumen yang diluluskan). Polimorfisme membolehkan kod yang lebih fleksibel dan boleh diperluas, kerana objek pelbagai jenis boleh digunakan secara bergantian di mana antara muka adalah sama.
Encapsulation meningkatkan keselamatan kod python dalam beberapa cara:
__
), anda boleh menghalang akses langsung ke data sensitif dari luar kelas. Ini mengurangkan risiko manipulasi yang tidak dibenarkan atau perubahan yang tidak diingini pada data, dengan itu meningkatkan keselamatan.Berikut adalah contoh mudah yang menunjukkan enkapsulasi untuk keselamatan yang lebih baik:
<code class="python">class BankAccount: def __init__(self, account_number, balance): self.__account_number = account_number self.__balance = balance def get_balance(self): return self.__balance def set_balance(self, amount): if amount >= 0: self.__balance = amount else: print("Invalid balance amount") # Usage account = BankAccount("1234567890", 1000) print(account.get_balance()) # Outputs: 1000 account.set_balance(-100) # Outputs: Invalid balance amount print(account.get_balance()) # Outputs: 1000</code>
Warisan di Python menyediakan beberapa faedah untuk kebolehgunaan semula kod, termasuk:
Berikut adalah contoh yang menunjukkan manfaat warisan untuk kebolehgunaan semula kod:
<code class="python">class Vehicle: def __init__(self, brand, model): self.brand = brand self.model = model def display_info(self): print(f"Brand: {self.brand}, Model: {self.model}") class Car(Vehicle): def __init__(self, brand, model, num_doors): super().__init__(brand, model) self.num_doors = num_doors def display_info(self): super().display_info() print(f"Number of doors: {self.num_doors}") class Motorcycle(Vehicle): def __init__(self, brand, model, has_sidecar): super().__init__(brand, model) self.has_sidecar = has_sidecar def display_info(self): super().display_info() print(f"Has sidecar: {self.has_sidecar}") # Usage car = Car("Toyota", "Corolla", 4) car.display_info() # Output: # Brand: Toyota, Model: Corolla # Number of doors: 4 motorcycle = Motorcycle("Honda", "CBR", False) motorcycle.display_info() # Output: # Brand: Honda, Model: CBR # Has sidecar: False</code>
Polimorfisme di Python meningkatkan fleksibiliti program dengan membenarkan objek pelbagai jenis digunakan secara bergantian melalui antara muka yang sama. Ini membawa kepada kod yang lebih fleksibel dan boleh diperpanjang. Inilah demonstrasi:
<code class="python">class Shape: def area(self): pass class Circle(Shape): def __init__(self, radius): self.radius = radius def area(self): return 3.14 * self.radius ** 2 class Rectangle(Shape): def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.height # Using polymorphism to calculate areas of different shapes shapes = [Circle(5), Rectangle(4, 6)] for shape in shapes: print(f"Area: {shape.area()}")</code>
Dalam contoh ini, kita menentukan Shape
kelas asas dengan area()
. Kelas Circle
dan Rectangle
mewarisi dari Shape
dan menyediakan pelaksanaan sendiri kaedah area()
.
Fleksibiliti polimorfisme ditunjukkan oleh keupayaan untuk melangkah ke atas senarai shapes
dan area()
pada setiap objek, tanpa mengira jenis khususnya. Kaedah yang sesuai area()
dipanggil berdasarkan jenis sebenar setiap objek, mempamerkan bagaimana polimorfisme meningkatkan fleksibiliti program dengan membenarkan kelas yang berbeza untuk bertindak balas terhadap panggilan kaedah yang sama dengan cara yang sesuai dengan jenis khusus mereka.
Pendekatan ini membolehkan anda menambah bentuk baru (seperti Triangle
atau Square
) tanpa mengubah kod sedia ada yang memproses bentuk, menjadikan program lebih mudah disesuaikan dan lebih mudah untuk diperluas.
Atas ialah kandungan terperinci Terangkan konsep enkapsulasi, warisan, dan polimorfisme dalam Python.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!