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é)圖:

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 集合
3.7 上下文管理類型(with)
3.8 其他
- 模塊類型
- class和實(shí)例
- 函數(shù)類型
- 方法類型
- 代碼類型
- object類型
- type類型
- elipsis類型
- notimplemented類型
歡迎關(guān)注我的公眾號(hào)查看更多文章
|