面向對象編程思想之路···

面向對象筆記整理

最近一直在學習面向對象編程的思維,逐漸的理解是最大的收穫了,對本週學習的筆記進行一個小結(可能會比較亂),如果有更好的學習方法也請推薦一波吧!

一.面向對象的三個基本特徵。

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()函數:可以訪問已在類對象中覆蓋的繼承方法。

@abstractmethod
抽象方法:不能被實例化(創建對象),它的存在就是讓更多的人去繼承它。
(+一個 個人覺得比較好理解的實例)

from abc import ABCMeta, abstractmethod


class Pet(object, metaclass=ABCMeta):
    """寵物"""

    def __init__(self, nickname):
        self._nickname = nickname

    @abstractmethod
    def make_voice(self):
        """發出聲音"""
        pass


class Dog(Pet):
    """狗"""

    def make_voice(self):
        print('%s: 汪汪汪...' % self._nickname)


class Cat(Pet):
    """貓"""

    def make_voice(self):
        print('%s: 喵...喵...' % self._nickname)


def main():
    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 = 10

day = WeekDays.FRIDAY

print(day)
print(day.value)
print(day.name)


輸出結果:
WeekDays.FRIDAY
10
FRIDAY

4.限制枚舉類
爲了使枚舉常量成員只能是整數類型: enum.IntEnum作爲父類
防止常量重複: @enum.unique 裝飾器(如果常量重複報錯)
代碼示例:

import enum

@enum.unique  #裝飾器
class WeekDay(enum.IntEnum):   #只能是整數類型
	#枚舉常量列表
	MONDAY = 1
	TUESDAY = 2
	WEDNESDAY = 3
	THURSDAY = 4
	FRIDAY = 10

day = WeekDays.FRIDAY

print(day)
print(day.value)
print(day.name)

如果嘗試將其中的成員值修改爲非整數類型,或者修改相同值,則發生異常。

這次的分享到這裏,如有整理錯誤之處,留下寶貴意見。
希望自己早日脫離小白之稱·
····

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章