一、Python面向對象的三大特性
Python作為一種面向對象的編程語言,具有三大特性:封裝、繼承和多態。
1、封裝
封裝是指將對象的某些屬性和方法隱藏起來,不允許外部程序直接訪問和修改。Python中通過在某些屬性和方法名前添加兩個下劃線“__”實現了屬性和方法的私有化,這種方式也被稱為“名稱重整”(name mangling)。
class Car: def __init__(self, color, model): self.__color = color self.model = model def get_color(self): return self.__color def set_color(self, color): self.__color = color my_car = Car("red", "Tesla Model S") print(my_car.get_color()) # 輸出:red my_car.set_color("blue") # 修改顏色為blue print(my_car.get_color()) # 輸出:blue
上面的代碼中,我們將Car類的顏色屬性私有化了,外部無法直接訪問,只能通過公共的get_color和set_color方法來獲取或修改顏色屬性的值。
2、繼承
Python中的繼承是一種創建新類的方式,新類可以繼承現有類的方法和屬性,從而避免代碼冗餘和提高代碼復用性。Python中使用圓括號指定繼承的基類,如果省略基類,則默認為object。
class Animal: def __init__(self, name, age): self.name = name self.age = age def say_hello(self): print("I'm an animal.") class Dog(Animal): def __init__(self, name, age, breed): super().__init__(name, age) self.breed = breed def say_hello(self): print("I'm a dog.") my_dog = Dog("Tom", 3, "Husky") my_dog.say_hello() # 輸出:I'm a dog.
上面的代碼中,我們定義了一個Animal基類,其中有name和age兩個屬性,以及say_hello方法。然後我們再定義一個Dog類,並繼承Animal類,新增breed屬性和重新實現say_hello方法。這樣我們就可以使用Dog類的對象來訪問原來Animal類的方法和屬性,也可以擴展和修改原來的屬性和方法。
3、多態
多態是指同一個方法可以作用於不同的對象,並根據對象的類型執行不同的操作。Python中的多態實現非常簡單,無需特別的聲明即可完成。
class Shape: def area(self): pass class Rectangle(Shape): def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.height class Circle(Shape): def __init__(self, radius): self.radius = radius def area(self): return 3.14 * self.radius ** 2 my_rectangle = Rectangle(3, 4) my_circle = Circle(5) print(my_rectangle.area()) # 輸出:12 print(my_circle.area()) # 輸出:78.5
上面的代碼中,我們定義了一個Shape基類,其中有一個area方法,但是不做具體實現,因為不同的形狀會有不同的計算公式。然後我們分別定義了Rectangle和Circle兩個類,都繼承自Shape類,並分別實現了自己的area方法,這樣我們就可以使用不同的對象調用相同的方法並得到不同的結果。
二、Python面向對象的四大特性
有時候我們也會把多態理解為Python面向對象的四大特性之一,這樣就得到了封裝、繼承、多態以及抽象四個特性。
1、抽象
抽象是指將一個複雜的實體或問題簡化成一些關鍵的特徵和屬性,然後忽略其他的次要特徵。Python中實現抽象的方式是通過接口或者抽象基類(Abstract Base Classes)來實現。
from abc import ABC, abstractmethod class Shape(ABC): @abstractmethod def area(self): pass class Rectangle(Shape): def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.height class Circle(Shape): def __init__(self, radius): self.radius = radius def area(self): return 3.14 * self.radius ** 2 my_rectangle = Rectangle(3, 4) my_circle = Circle(5) print(my_rectangle.area()) # 輸出:12 print(my_circle.area()) # 輸出:78.5
上面的代碼中,我們定義了一個Shape基類,並規定了area方法必須被子類實現。這樣就保證了所有的形狀對象都必須實現自己的area方法,並且可以直接使用Shape類對象去調用area方法,從而達到了抽象的目的。
三、面向對象程序設計的特性
面向對象程序設計具有以下特性:
1、封裝數據和行為
數據和行為被作為一個整體進行封裝,從而保護了數據的獨立性和安全性。
2、繼承和子類化
子類可以從父類中繼承屬性和方法,並且也可以根據自己的需要添加新的屬性和方法。
3、多態
同一個方法可以作用於不同的對象,並根據對象的類型執行不同的操作。
4、模塊化開發
不同的類可以分別定義在不同的文件中,以達到更好的模塊化開發和代碼管理。
5、接口和抽象類
接口和抽象類可以約束子類必須實現哪些方法和屬性,並且可以達到更好的代碼擴展和復用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/270967.html