日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

【Python核心編程筆記】一、Python中一切皆對(duì)象

 頭號(hào)碼甲 2021-05-02

Python中一切皆對(duì)象

本章節(jié)首先對(duì)比靜態(tài)語(yǔ)言以及動(dòng)態(tài)語(yǔ)言,然后介紹 python 中最底層也是面向?qū)ο笞钪匾膸讉€(gè)概念-object、type和class之間的關(guān)系,以此來(lái)引出在python如何做到一切皆對(duì)象、隨后列舉python中的常見(jiàn)對(duì)象。

1.Python中一切皆對(duì)象

Python的面向?qū)ο蟾鼜氐?,Java和C++中基礎(chǔ)類型并不是對(duì)象。在Python中,函數(shù)和類也是對(duì)象,屬于Python的一等公民。對(duì)象具有如下4個(gè)特征

  • 1.賦值給一個(gè)變量
  • 2.可以添加到集合對(duì)象中
  • 3.可以作為參數(shù)傳遞給函數(shù)
  • 4.可以作為函數(shù)地返回值

下面從四個(gè)特征角度分別舉例說(shuō)明函數(shù)和類也是對(duì)象

1.1 類和函數(shù)都可以賦值給一個(gè)變量

類可以賦值給一個(gè)變量

class Person:
    def __init__(self, name="lsg"):
        print(name)


if __name__ == '__main__':
    my_class = Person  # 類賦值給一個(gè)變量
    my_class()  # 輸出lsg,變量直接調(diào)用就可以實(shí)例化一個(gè)類,滿足上面的特征1,這里顯然說(shuō)明類也是一個(gè)對(duì)象
    my_class("haha")  # 輸出haha

函數(shù)可以賦值給一個(gè)變量

def func_test(name='lsg'):
    print(name)


if __name__ == '__main__':
    my_func = func_test
    my_func("haha") # 輸出haha,對(duì)變量的操作就是對(duì)函數(shù)的操作,等效于對(duì)象的賦值,滿足上面的特征1,說(shuō)明函數(shù)是對(duì)象。

1.2 類和函數(shù)都可以添加到集合中

class Person:
    def __init__(self, name="lsg"):
        print(name)


def func_test(name='lsg'):
    print(name)


if __name__ == '__main__':
    obj_list = [func_test, Person]
    print(obj_list) # 輸出[<function func_test at 0x0000025856A2C1E0>, <class '__main__.Person'>]

1.3 類和函數(shù)都可以作為參數(shù)傳遞給函數(shù)

class Person:
    def __init__(self, name="lsg"):
        print(name)


def func_test(name='lsg'):
    print(name)


def print_type(obj):
    print(type(obj))


if __name__ == '__main__':
    print_type(func_test)
    print_type(Person)

輸出如下

<class 'function'>
<class 'type'>

可以明顯地看出類和函數(shù)都是對(duì)象

1.4 類和函數(shù)都可以作為函數(shù)地返回值

class Person:
    def __init__(self, name="lsg"):
        print(name)


def func_test(name='lsg'):
    print(name)


def decorator_func():
    print("pre function")
    return func_test


def decorator_class():
    print("pre class")
    return Person


if __name__ == '__main__':
    decorator_func()()  # 返回的右值作為函數(shù)可以直接調(diào)用
    decorator_class()()  # 返回的右值作為類可以直接實(shí)例化

2.type、object和class的關(guān)系

代碼舉例如下, 可以得出三者的關(guān)系是type --> class --> obj

2.1 type --> int --> a

a = 1
print(type(a)) # <class 'int'>
print(type(int)) # <class 'type'>

2.2 type --> str --> b

b = 'abc'
print(type(b)) # <class 'str'>
print(type(str)) # <class 'type'>

2.3 type --> Student --> stu

class Student:
    pass

stu = Student()
print(type(stu)) # <class '__main__.Student'>
print(type(Student)) # <class 'type'>

2.4 type --> list --> c

c = [1, 2]
print(type(c)) # <class 'list'>
print(type(list)) # <class 'type'>

總結(jié)圖:
file

3.Python中常見(jiàn)的內(nèi)置類型

對(duì)象的三個(gè)特征:身份、內(nèi)存和值

  • 身份:在內(nèi)存中的地址,可以用id(變量)函數(shù)來(lái)查看
  • 類型:任何變量都必須有類型

常見(jiàn)的內(nèi)置類型如下

3.1 None:全局只有一個(gè)

如下代碼,兩個(gè)值為None的變量地址完全相同,可見(jiàn)None是全局唯一的

a = None
b = None
print(id(a))
print(id(b))
print(id(a) == id(b))

3.2 數(shù)值類型

  • int
  • float
  • complex(復(fù)數(shù))
  • bool

3.3 迭代類型:iterator

3.4 序列類型

  • list
  • bytes、bytearray、memoryview(二進(jìn)制序列)
  • range
  • tuple
  • str
  • array

3.5 映射類型(dict)

3.6 集合

  • set
  • frozenset

3.7 上下文管理類型(with)

3.8 其他

  • 模塊類型
  • class和實(shí)例
  • 函數(shù)類型
  • 方法類型
  • 代碼類型
  • object類型
  • type類型
  • elipsis類型
  • notimplemented類型

歡迎關(guān)注我的公眾號(hào)查看更多文章

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多