python中一切皆對象
-
python中的一切皆對象更加徹底
在python中的一切皆對象比Java中的一切皆對象更加徹底,Java中有class,也就是類的概念,object是class的一個執行個體。
函數和類也是對象
- 可以指派給一個變量
# 函數可以指派給一個變量
def ask(name='sixkery'):
print(name)
my_func = ask # 函數賦給變量
my_func() # 把函數當變量來使用
控制台輸出:
sixkery
# 類也可以指派給一個變量
class Person():
def __init__(self):
print("sixkery")
my_func = Person # 類賦給變量
my_func() # 對變量的操作執行個體化
控制台輸出:
sixkery
- 可以添加到一個集合中
def ask(name='sixkery'):
print(name)
class Person():
def __init__(self):
print("sixkery1")
obj_list = []
obj_list.append(ask)
obj_list.append(Person)
for item in obj_list:
print(item())
控制台輸出:
sixkery
None
sixkery1
<__main__.Person object at 0x03C88B70>
出現None是因為一個函數沒有傳回值會傳回None,init傳回一個類的對象。
- 可以作為參數傳遞給函數
-
可以當作函數的傳回值
函數可以傳回一個函數實際上是python中的裝飾器的實作原理。
def ask(name='sixkery'):
print(name)
def decorator_fubc():
print('dec start')
return ask
my_ask = decorator_fubc()
my_ask()
控制台輸出:
dec start
sixkery
這樣就實作了一個函數通路另一個函數。
type、object、class 的關系

三者關系
圖中虛線代表執行個體關系,實線表示繼承關系,從這個圖中得出幾點:
- list、str、dict、tuple、type都繼承了object,是以object是最頂層的基類
- type是本身的對象(執行個體),object、list、str、dict、tuple都是type的對象,是以type建立了所有的對象
- 綜合1、2可知,一切皆對象的同時又繼承了object類,這就是python的靈活之處,Python的面向對象更加徹底
下面是驗證的例子, #後面表示運作結果
type建立了所有的對象
a = 1
print(type(a)) # <class 'int'>
print(type(int)) # <class 'type'>
type->int->1 即type類生成int,int類生成了1。
s = 'abc'
print(type(s)) # <class 'str'>
print(type(str)) # <class 'type'>
type->str->’abc’
是以type可以生成class(類), class生成obj(對象)
以上是内置類,現在我們自己建立來看下。
class Student:
pass
stu = Student()
print(type(stu)) # <class '__main__.Student'>
print(type(Student)) # <class 'type'>
結果和上面的情況一樣,type->Student->stu
class Student:
pass
#Student繼承了最頂層的object同時Student又是type的對象
Student.__bases__ # <class 'object',>
print(type(Student)) # <class 'type'>
#type是自身的對象,object是type的對象
print(type(type)) # <class 'type'>
print(type(object)) # <class 'type'>
#type繼承了object類,最頂層的object的基類為空
print(type.__bases__) # <class 'object'>
print(object.__bases__) # ()
python中的常見内置類型
常見類型
對象的三個特征
-
身份
身份可以了解成在記憶體中的位址,可以通過 id() 函數檢視某一個對象的身份,因為對象是配置設定在記憶體當中的。相當于指針指向對象。
a = 1
print(id(a)) # a 的位址 1493816368
b = []
print(id(b)) # b 的位址 134273344
-
類型
比如上方的 a 是 int 類型的,b 的類型是 list 。
-
值
上方的 1 就是 a 的值。
python 的類型
None(全局隻有一個)
python在解釋器啟動的時候生成一個None 對象。
In [1]: a = None
In [2]: b = None
In [3]: id(a) == id(b)
Out[3]: True
這裡 a 和 b 都指向python解釋器中唯一的一個None對象。
數值
- int
- float
- complex(複數)
- bool(True/False)
疊代類型
可以用for循環來周遊
序列類型
- list
- bytes、bytearray、memonyview(二進制序列)
- range
- tuple
- str
- array
映射類型
dict 字典,有key-value
集合
- set
- frozenset(不可變類型)
上下文管理類型
也就是 with 語句
其他
- 子產品類型、 class和執行個體、 函數類型、方法類型、代碼類型、object對象、type類型、elipsis(省略号) 類型、notimplemented類型