Python每天五分鐘-面向對象編程之類
- 2019 年 12 月 17 日
- 筆記
面向對象
面向對象編程簡稱oop(Object Oriented Programming),是一種程序的設計架構。共有三大特性:封裝、繼承、多態。五大原則:單一職責原則、開放封閉原則、替換原則、依賴原則、接口分離原則。
封裝
Python中的類使用class關鍵字來定義。類在面向對象編程中是佔比很大的一部分,定義一個類相當於將某件事物的屬性及基本操作歸類起來。 例如:我們定義一個person類,person類中可以有身高、體重、年齡、名字等很多屬性,可以有跑、跳、叫等基本操作。
class person(object): ## 類實例化方法 def __init__(self, name = 'hanmeimei', age = 12): self.name = name self.age = age p = person('liming', 10) print(p.name, p.age) # 輸出結果 # liming 10
類的初始化
__init__是將類實例化的時候調用的方法,即類初始化的方法,第一個參數默認是self也就是實例化對象本身。 當一個類中定義了__init__方法時,實例化的時候就需要傳遞相應的參數,如果不需要傳遞,需要指定形參的默認值。
類屬性
在實例化類後我們可以定義或者修改類的屬性
p.height = '206cm' p.name = '姚明' p.age = 24 print(p.name, p.age, p.height) # 輸出結果 # 姚明 24 206cm
類方法
在類內部定義一個獲取姓名的方法
class person(object): ## 類實例化方法 def __init__(self, name = 'hanmeimei', age = 12): self.name = name self.age = age def getName(self): print(self.name) p = person() p.getName() # 輸出結果 # hanmeimei
類屬性的訪問控制
上面定義的屬性都可以在類實例化後進行外部訪問或修改,如果並不希望某個屬性被外部訪問或修改,可以在屬性前增加兩個下劃線__,這樣這個屬性就變成了私有屬性,外部是不可直接訪問、不可直接修改的。
class person(object): ## 類實例化方法 def __init__(self, name = 'hanmeimei', age = 12): self.__name = name self.__age = age def getName(self): print(self.__name) p = person() print(p.__name) # 報錯結果 AttributeError: 'person' object has no attribute '__name' 表示這個對象沒有__name屬性
如果需要獲取__name可以使用定義的getName()方法。 有時不僅僅是獲取,還需要修改。需要定義修改方法。
class person(object): ## 類實例化方法 def __init__(self, name = 'hanmeimei', age = 12): self.__name = name self.__age = age def getName(self): print(self.__name) def setName(self, name): self.__name = name p = person() p.setName('lilei') p.getName() # 輸出結果 # lilei
類的繼承
在面向對象編程中繼承就是在原有類的基礎上再次進行功能封裝,並且可以使用或重寫原有類的方法、屬性,提高了編程效率。一般被繼承的類稱之為基類、父類,通過繼承創建的類稱之為子類、派生類。
class Person(object): def run(self): print('person is running') class Lilei(Person): pass li = Lilei() li.run() # person is running
多態
通過重寫父類方法就可以體現多態的特性,多態表示同一個實例的相同方法在不同的業務場景下的不同表現形式。
class Lilei(Person): def run(self): print('lilei is running....') li = Lilei() li.run() # lilei is running....
子類中可以使用super().run()來調用父類中的方法。
class Lilei(Person): def run(self): super().run() print('lilei is running....') li = Lilei() li.run() # person is running # lilei is running....