最近一直在學習物件導向程式設計的思維,逐漸的理解是最大的收穫了,對本週學習的筆記進行乙個小結(可能會比較亂),如果有更好的學習方法也請推薦一波吧!一.物件導向的三個基本特徵。
1. 封裝性
2. 繼承性
3. 多型性
① 定義類:格式:
class 類名(父類):
類體進一步採用 《物件名》.《屬性名》 or 《物件名》.《方法名》() 體現類功能
例項變數
def __init__(self,《其他引數》)
類變數類中的變數,所有例項(或物件)所共有
構造方法
__init__不用傳入self引數
例項方法
self.例項變數。 呼叫例項方法不需傳入self引數
類方法類物件的方法,由所有例項物件共享。採用 《類名》.《方法名》(《引數列表》) or《物件名》.《方法名》(《引數》)注意☆:1.需要加@classmethod裝飾器 2. 第乙個引數約定為cls
靜態方法
定義在類中的普通函式,能夠被所有例項物件共享。 採用《類名》.《方法名》(《引數》) or 《物件名》.《方法名》(《引數》) 注意☆:1.靜態方法可以沒有引數。2.需要加@staticmethod宣告3.不可以操作例項屬性和例項方法
自由方法
類中的普通函式。例項方法採用《物件名》.《方法名》(《引數》)方法使用
保佑方法
由雙下劃線開始和結束的方法。e.g. __len__()
私有方法
只需要在方法前加雙下劃線即可def __run(self): 接函式體
私有變數:在變數前 下雙下劃線__,(並非真正私有),如要訪問,命名規律為_類名__變數 就可以訪問量。
② 繼承性
super()函式:可以訪問已在類物件中覆蓋的繼承方法。
from abc import abcmeta, abstractmethod
class
pet(
object
, metaclass=abcmeta)
:"""寵物"""
def__init__
(self, nickname)
: self._nickname = nickname
@abstractmethod
defmake_voice
(self)
:"""發出聲音"""
pass
class
dog(pet)
:"""狗"""
defmake_voice
(self)
:print
('%s: 汪汪汪...'
% self._nickname)
class
cat(pet)
:"""貓"""
defmake_voice
(self)
:print
('%s: 喵...喵...'
% self._nickname)
defmain()
: pets =
[dog(
'旺財'
), cat(
'凱蒂'
), dog(
'大黃')]
for pet in pets:
pet.make_voice(
)if __name__ ==
'__main__'
: main(
)
多繼承的特點:
當子類例項呼叫乙個方法時,先從子類中查詢,如果沒有找到則查詢父類。
查詢順序安子類宣告父類列表從左往右中查詢,如找不到父類再找父類的父類。
多型的概念:1.繼承——多型發生一定是子類和父類之間
2.重寫——子類重寫父類的方法
③ 列舉類(本質上也是一種類: import enum)
在python 中定義列舉類語法格式如下:
class 列舉類名 (enum.enum):
列舉常量列表
列舉類繼承自enum.enum 類。 列舉中會定義多個常量成員。給個示例:
import enum
class
weekday
(enum.enum)
:#列舉常量列表
monday =
1 tuesday =
2 wednesday =
3 thursday =
4 friday =
10day = weekdays.friday
print
(day)
print
(day.value)
print
(day.name)
輸出結果:
weekdays.friday
10friday
4.限制列舉類
為了使列舉常量成員只能是整數型別: enum.intenum作為父類
防止常量重複: @enum.unique 裝飾器(如果常量重複報錯)
**示例:
import enum
@enum.unique #裝飾器
class
weekday
(enum.intenum)
:#只能是整數型別
#列舉常量列表
monday =
1 tuesday =
2 wednesday =
3 thursday =
4 friday =
10day = weekdays.friday
print
(day)
print
(day.value)
print
(day.name)
如果嘗試將其中的成員值修改為非整數型別,或者修改相同值,則發生異常。 物件導向程式設計思想
舉個最簡單點的例子來區分 有一天要請客吃飯,怎麼辦?有兩個方法 1 買菜,買調料,買肉,買酒水,然後下廚房動手炒菜 2 去飯店,點個 看出來區別了嗎?方法1是面向過程,方法2是物件導向。物件導向有什麼優勢?首先不需要知道各種菜式是怎麼做的,降低了耦合性。如果突然想換 了,對於方法1可能不太容易,因為...
物件導向程式設計思想
所謂的物件導向,是一種程式設計思想,程式設計思路,的書寫格式,複雜程式的封裝,封裝成其他形式,使用物件導向的方式來封裝程式。物件導向 有封裝好的物件導向的的程式 直接呼叫執行就可以了 功能和作用類似於 封裝好的函式 但是 封裝的語法和思想與函式不同 物件導向的基本思想 基本思路就是,建立乙個物件,給...
物件導向程式設計思想
介面是為了處理各個物件之間的協作關係,是系統設計的關鍵部分,主要作用是為了將 定義 與 實現 分離,從而實現系統解耦的目的。在系統設計之初,我們要為抽象類建立行為模型 為什麼要面向介面程式設計?因為物件導向設計原則為我們提供了方法和原則 七大原則 開 面向擴充套件開放,面向修改關閉 口 介面隔離原則...