PythonI/O進階學習筆記_1.抽象、面向對象、class/object/type

前言:html

是本身在學習python進階IO學習視頻的時候的理解和筆記,由於不少都是本菜鳥學習時候的本身的理解,有可能理解有誤。python

Content:算法

- 抽象的概念和麪向對象的概念?想要大概瞭解python的面向對象須要注意哪些知識點?編程

- 由type、object、class來了解python對象的機制和特性app

- python提供了哪些經常使用的內置類型?(被抽象成類)函數

一  抽象和麪向對象和類學習

    在python基礎教程書中,有一章名字是抽象,在學習的時候,我還曾經把這裏面抽象的概念和後面抽象基類的概念弄混淆。ui

    1.抽象的概念spa

    從具體事物抽出、歸納出它們共同的方面、本質屬性與關係等,而將個別的、非本質的方面、屬性與關係捨棄,這種思惟過程,稱爲抽象。 --baidu設計

 在編程中,最簡單的抽象概念就是計算機能理解的一步一步的計算步驟抽象成類或者函數來進行調用,方便人進行抽象理解也方便重用(過程抽象)。

    最開始的編程歷史中就和咱們初學編程同樣,都是過程抽象(結構化設計方法),可是通過發展慢慢發現僅僅是結構化設計已經知足不了咱們了,因而有了對面向對象的需求。

    2.面向對象的概念

    面向對象是一種對現實世界理解和抽象的方法,是計算機編程發展到必定階段後,產生的一種軟件開發方法。 --baidu

    面向對象中的對象:對象是人們要進行研究的任何事物,從最簡單的整數到複雜的飛機等都可看做對象,它不只能表示具體的事物,還能表示抽象的規則、計劃或事件。 --baidu

    https://baike.baidu.com/item/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/2262089?fr=aladdin#2

    三大特性:封裝、繼承、多態。

    3.類的概念

    具備相同特性和行爲的對象的抽象就是類。對象的抽象是類,類的具體是對象。類有屬性和操做。

    4.python面向對象的設計

    一、二、3中算是編程中的基本概念吧,python中的面向對象設計理念和其餘靜態語言仍是有所區別的。

    a)python面向對象方法中一些比較重要的知識點(不詳解)

        鴨子類型、抽象基類、繼承的時候的查找算法和super函數、靜態方法、類方法、實例方法、python的數據封裝和私有屬性

    b)python中一切皆對象,類和函數也是對象。

    c)  類和函數在python中做爲對象有哪些特質?

        - 能夠賦值給一個變量

        - 能夠添加到集合對象中

        - 能夠做爲參數傳遞給函數

        - 能夠看成函數的返回值

 

二  type、object和class

       在看這段以前,須要先看python基礎明白繼承和實例的概念,還有父類和基類。

  1.type能夠用來返回一個對象的類型

         a)當a是普通int、str類型時

           

這個結果很好玩,能夠發現1的類型是int,int的類型是type。還有type的類型居然也是type。

能夠得出 type類生成了int類,int類(也是對象)生成了 a這個實例

也就是 type--》class--》object

b)若是當a是一個自定義類的時候呢?

a是Student類型,Student是type類型

因此能夠得出  type是用來生成類對象的,全部的類都是type類。包括list、dict等也是的。

邏輯:類是type(本身也是個類)的對象,其餘的類型是類生成的對象

2.object是全部類的基類,包括也是type這個類的基類

object是最頂層的基類,全部的類最後推到都是繼承object類的。

發現type是object類的子類的,那object呢?
 
type繼承了object類,
object是由type生成的對象。二者成爲了循環。
並且object是最頂層的類,再往上就沒有類了。
 
總結:type、object和class的關係爲:
 
思考:python爲何會設計成這樣的一切皆對象呢?
對象是能夠隨時修改的。

 

 三  python中經常使用的內置類型

對象在python中,有三個特徵,身份、類型和值。

  • 身份: 每個對象都有一個惟一的身份標識本身。任何對象的身份可使用內建函數id()來獲得。這個值能夠被認爲是該對象的內存地址
  • 類型: 對象的類型決定了對象能夠保存什麼類型的值,能夠進行什麼樣的操做,以及遵循什麼樣的規則。能夠內建type()查看對象的類型
  • 值:對象表示的數據項

其中類型的分類經常使用的有可迭代類型、不可迭代類型等、和其餘序列類型、映射(mapping)、數值(int、float等)、集合、上下文管理等一系列類型。

 

 

  

查看type實現了哪些Type?能夠用isinstance來判斷這個對象是否屬於這個基本類型。

>>> import types

>>> dir(types)

['AsyncGeneratorType', 'BuiltinFunctionType', 'BuiltinMethodType', 'CodeType', 'CoroutineType', 'DynamicClassAttribute', 'FrameType', 'FunctionType', 'GeneratorType', 'GetSetDescriptorType', 'LambdaType', 'MappingProxyType', 'MemberDescriptorType', 'MethodType', 'ModuleType', 'SimpleNamespace', 'TracebackType', '_GeneratorWrapper', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_ag', '_calculate_meta', '_collections_abc', '_functools', 'coroutine', 'new_class', 'prepare_class']

    

>>> isinstance([], list)

True

>>> isinstance({}, dict)

True

這裏藏着很重要的知識點鴨子類型和魔法函數~ 之後會慢慢深刻了解的。

原文出處:https://www.cnblogs.com/besttr/p/11318699.html

相關文章
相關標籤/搜索