Python 部分知識點總結(七)

此篇博客只是記錄第九周未掌握或不熟悉的知識點,用來加深印象。

一、面向對象

  1. 語言的分類
    ?? ?? ? 面向機器:抽象成機器指令,機器容易理解,代表是?匯編語言
    ?? ?? ? 面向過程:做一件事情,排出個步驟,第一步干什么,第二步干什么,如果出現情況?A,做什么處理,如果出現了情況?B,做什么處理
    ?? ??? ??? ??? ??? ??? ?? 問題規模小,可以步驟化,按部就班處理,代表是?C語言
    ?? ?? ? 面向對象OOP(Object Oriented Programming):隨著計算機需要解決的問題的規模擴大,情況越來越復雜,需要很多人,很多部門協作,面向過程編程不太適合了,代表是?C++、Java、Python等
  2. 面向對象:一種認識世界、分析世界的方法論,將萬事萬物抽象為類。
    類:抽象的概念,是萬事萬物的抽象,是一類事物的共同特征的集合,用計算機語言來描述類,就是屬性和方法的集合。
    對象:是類的具象,是一個實體,對于我們每個人這個個體,都是抽象概念人類的不同的實體。
    舉例:你吃魚
    ?? ??? ?? 你,是對象;魚,也是對象;吃就是動作
    ?? ??? ?? 你,是具體的人,是具體的對象,你屬于人類,人類是個抽象的概念,是無數具體的個體的抽象
    ?? ??? ?? 魚,也是具體的對象,就是你吃的這一條具體的魚,這條魚屬于魚類,是無數的魚抽象出來的概念
    ?? ??? ?? 吃,是動作,也是操作,也是方法,這個吃是你的動作,也就是人類具有的方法
    哲學:一切皆對象
    ?? ??? ?? 對象是數據和操作的封裝
    ?? ??? ?? 對象是獨立的,但是對象之間可以相互作用
    ?? ?? ? ? 目前?OOP?是最接近人類認知的編程方式
  3. 面向對象的三要素
    封裝
    ?? ?? ? 組裝:將數據和操作組裝到一起
    ?? ?? ? 隱藏數據:對外只暴露一些接口,通過接口訪問對象
    繼承
    ?? ?? ? 多復用,繼承來的就不用自己寫了
    ?? ?? ? 多繼承少修改,OCP(Open-closed?Principle),使用繼承來改變,來體現個性
    多態
    ?? ?? ? 面向對象編程最靈活的地方,動態綁定
    人類就是封裝;人類繼承自動物類,孩子繼承父母特征,分為單一繼承、多繼承;多態,繼承自動物類的人類、貓類的操作“吃”不同
  4. Python?類的定義:必須使用?class?關鍵字;類名必須是用大駝峰命名;類定義完成后,就產生了一個類對象,綁定到了標識符?ClassName?上
  5. Python?類實例化后,會自動調用 __init__?方法,這個方法第一個參數必須留給?self,其他參數隨意,作用就是對實例進行初始化,注意 __init__( )?方法不能有返回值,也就說只能是?None
    ?? ?類實例化后一定會獲得一個對象,就是實例對象,__init__?方法的第一個參數?self?就是指代某一個實例,表示創建的類實例本身,因此,在 __init__?方法內部,就可以把各種屬性綁定到?self
    ? ? 在類中定義函數只有一點不同,就是第一參數永遠是類的本身實例變量?self,并且調用時,不用傳遞該參數
  6. 實例變量是每一個實例自己的變量,是自己獨有的;類變量是類的變量,是類的所有實例共享的屬性和方法
    __name__? 對象名
    __class__? 對象的類型
    __dict__? 對象的屬性的字典
    __qualname__? 類的限定名
    總結:類變量是屬于類的變量,這個類的所有實例可以共享這個變量
    ?? ??? ?? 實例變量只能通過實例訪問,通過類訪問不到
    ?? ?? ? ? 類變量使用全大寫來命名
  7. 類裝飾器
    def add_name(name):
    ????def wrapper(cls):
    ????????cls.NAME = name
    ????????return cls
    ????return wrapper
    @add_name(‘Tom’)
    class Person:
    ????AGE = 3
    print(Person.NAME)
  8. 類方法
    ?? ?? ? 在類定義中,使用 @classmethod?裝飾器修飾的方法
    ?? ?? ? 必須至少有一個參數,且第一個參數留給了?cls,cls?指代調用者即類對象自身
    ?? ?? ? cls?這個標識符可以是任意合法名稱,但是為了易讀,請不要修改
    ?? ?? ? 通過?cls?可以直接操作類的屬性
    ? ? 靜態方法
    ?? ?? ? 在類定義中,使用 @staticmethod?裝飾器修飾的方法
    ?? ?? ? 調用時,不會隱式的傳入參數
    ?? ?? ? 靜態方法只是表明這個方法屬于這個名詞空間,函數歸在一起,方便組織管理
    總結:類除了普通方法都可以調用,普通方法需要對象的實例作為第一參數
    ?? ??? ?? 實例可以調用所有類中定義的方法(包括類方法、靜態方法),普通方法傳入實例自身,靜態方法和類方法需要找到實例的類
  9. 訪問控制
    ? ? ? ? 私有屬性:使用雙下劃線開頭的屬性名
    ?? ?? ? 私有變量的本質:如果聲明了一個實例變量的時候,使用雙下劃線,Python?解釋器會將其改名,轉換名稱為 _類名__變量名?的名稱,所以用原來的名字訪問不到了
    ?? ?? ? 保護變量:在變量名前使用一個下劃線,Python?解釋器不會做任何改變,和普通屬性一樣,這只是開發者共同的約定,看見這種變量,就如同私有變量,不要直接使用
    ?? ?? ? 私有方法:參照私有變量、保護變量,使用單雙劃線、單下劃線命名方法
    ?? ?? ? 私有方法的本質:單下劃線的方法只是開發者之間的約定,解釋器不做任何改變
    ?? ??? ??? ??? ??? ??? ??? ??? ?? ?雙下劃線的方法,是私有方法,解釋器會改名,改名策略和私有變量相同,_類名__方法名
    ?? ??? ??? ??? ??? ??? ??? ??? ?? ? 方法變量都在類的 __dict__?中可以看到
  10. 屬性裝飾器:把實例的屬性保護起來,不讓外部直接訪問,外部使用?getter?讀取屬性和?setter 設置屬性
    property 裝飾器:后面跟的函數名就是以后的屬性名,它就是?getter,這個必須有,有了它至少是只讀屬性
    setter?裝飾器:與屬性名同名,且接收 2?個參數,第一個是?self,第二個是將要賦值的值,有了它,屬性可寫
    deleter 裝飾器:可以控制是否刪除屬性,很少用
    property?裝飾器必須在前,setter、deleter?裝飾器在后,
    class Person:
    ????def __init__(self,name,age=18):
    ????????self.name = name
    ????????self.__age = age
    ????@property
    ????def age(self):
    ????????return self.__age
    ????@age.setter
    ????def age(self,age):
    ????????self.__age = age
    ????@age.deleter
    ????def age(self):
    ????????# del self.__age
    ????????print(‘del’)
    tom = Person(‘Tom’)
    print(tom.age)
    tom.age = 20
    print(tom.age)
    del tom.age
    第二種方法是先定義三個函數,再加上一句?age = property(getage,setage,delage,’age property’),最后一個字段是?文檔?的意思
    第三種方法是?age = property(lambda self:self.__age),這個只能起到只讀的作用,不能寫入

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/97663

(1)
龐豪龐豪
上一篇 2018-05-06
下一篇 2018-05-06

相關推薦

欧美性久久久久