面向對象編程
面向對象編程,簡稱OOP:是一種解決軟件服用的設計和編程方法。這種方法把軟件系統中相似的邏輯操作、數據、狀態等以類的形式描述出來,通過對象實例在軟件系統中複用,從而提高軟件開發效率。
類和對象
定義和關係
- 類:一個事物的抽象,定義了一類事物的屬性和行爲。類具有繼承,多態,封裝等特性。
class 類名: #類命名規則遵守“大駝峯” def 方法名(self [, 參數列表]): #默認要傳入一個self參數,而且第一個參數必須是self
- 對象:通過類創建的一個具體事物,也就是類的實例,它具有狀態和行爲,可以做具體的事情。
對象變量名 = 類名()
- 兩者關係:類相當於創建對象的模板,根據類可以創建一個或者多個對象實例。
類的方法
類的構造方法
- _ init _構造方法:用於對象創建時初始化
- 調用時間:在對象被實例化時被程序自動調用
- 程序不顯示定義init方法,則程序默認調用一個無參init方法
- 對象創建過程
類的私有方法
- 只能在類內部調用,在類的外部無法調用
- 私有方法:在方法名前添加兩個下劃線,私有屬性如是
-
類內部調用私有方法要使用self.private_method()的方式調用
class Comrade: #私有方法 def __send_message(self): print("消息已經向上級彙報") def answer_secret(self, secret): if secret == "芝麻開門": print("接頭成功!") self.__send_message()#調用私有方法 else: print("接頭失敗!") comrade = Comrade() comrade.answer_secret("芝麻開門")
類的訪問權限
#設置對象屬性
def __init__(self, gender, variety, name):
self.gender = gender
self.variety = variety
self.name = name
修改對象屬性有兩種形式:
- 直接對屬性值進行賦值
- 通過方法對屬性值進行修改。這是推薦方式。可以達到對數據進行封裝。
類的特性一:繼承和多重繼承
繼承
定義:在程序中,子類從父類繼承,但是子類又可以提供除父類外自身獨有的方法和屬性。比如貓和狗都是動物,動物如果是父類的話,那麼貓和狗就是動物的子類。父類通常是抽象出帶有一些共性的特徵和方法的類。
#父類Animal
class Animal:
def eat():
print("eat")
#Dog
class Dog(Animal):
def shout()
print("汪汪汪")
wangcai = Dog()
#調用父類的eat
wangcai.eat()
#調用自身成員方法
wangcai.shout()
繼承注意事項
- 子類的非有屬性、方法,會被子類繼承
- 子類中方法的查找:先子類方法 =》後父類方法
- 子類可以繼承祖先類的非私有屬性和方法
- 在子類中調用父類的方法:ClassName.Method(self)
多重繼承
定義:一個類可以從多個父類繼承。
多繼承的定義方式:
class AI:
#人臉識別
def face_recongnition(self):
print("人臉識別")
def data_handle(self):
print("AI數據處理")
class BigData:
def data_analysis(self):
print("數據分析")
def data_handle(self):
print("BigData數據處理")
class Python(BigData, AI): #多重繼承
def operation(self):
print("自動化運維")
對於多重繼承,子類調用查找同名方法的順序:
- 取決於小括號內繼承父類從左到右的順序查找。
- 可以通過類的方法 _ mro _來查看查找順序。
類的特性二:多態
- 定義:一個抽象類有多個子類,不同的類表現出不同的形態。比如狗和貓,他們都會叫,但是叫的聲音是不同的。
- 子類對父類允許訪問的方法的實現過程進行重新編寫
- 在子類中定義與父類同名的方法。子類可以根據需要,定義合適的方法實現邏輯。
綜合例子: 繼承和多態
class Animal:
def __init__(self):
print("---animal構造方法---")
def __private_method(self):
print("私有方法")
def eat(self):
print("----吃----")
def drink(self):
print("----喝----")
def run(self):
print("----跑----")
class Dog(Animal):
def __init__(self):
print("dog構造方法")
#父類方法重寫
def run(self): #多態
print("搖着尾巴跑")
def hand(self):
Animal.run(self) #在子類中調用父類
print("------握手-----")
class GoldenDog(Dog):
def guid(self):
print("我能導航!")