python中一切皆對(duì)象
- python中的一切皆對(duì)象更加徹底
在python中的一切皆對(duì)象比Java中的一切皆對(duì)象更加徹底叹哭,Java中有class钝诚,也就是類的概念,object是class的一個(gè)實(shí)例汤求。
函數(shù)和類也是對(duì)象
- 可以賦值給一個(gè)變量
# 函數(shù)可以賦值給一個(gè)變量
def ask(name='sixkery'):
print(name)
my_func = ask # 函數(shù)賦給變量
my_func() # 把函數(shù)當(dāng)變量來使用
控制臺(tái)輸出:
sixkery
# 類也可以賦值給一個(gè)變量
class Person():
def __init__(self):
print("sixkery")
my_func = Person # 類賦給變量
my_func() # 對(duì)變量的操作實(shí)例化
控制臺(tái)輸出:
sixkery
- 可以添加到一個(gè)集合中
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())
控制臺(tái)輸出:
sixkery
None
sixkery1
<__main__.Person object at 0x03C88B70>
出現(xiàn)None是因?yàn)橐粋€(gè)函數(shù)沒有返回值會(huì)返回None,init返回一個(gè)類的對(duì)象桦他。
- 可以作為參數(shù)傳遞給函數(shù)
- 可以當(dāng)作函數(shù)的返回值
函數(shù)可以返回一個(gè)函數(shù)實(shí)際上是python中的裝飾器的實(shí)現(xiàn)原理。
def ask(name='sixkery'):
print(name)
def decorator_fubc():
print('dec start')
return ask
my_ask = decorator_fubc()
my_ask()
控制臺(tái)輸出:
dec start
sixkery
這樣就實(shí)現(xiàn)了一個(gè)函數(shù)訪問另一個(gè)函數(shù)霹期。
type叶组、object拯田、class 的關(guān)系
圖中虛線代表實(shí)例關(guān)系历造,實(shí)線表示繼承關(guān)系,從這個(gè)圖中得出幾點(diǎn):
list船庇、str吭产、dict、tuple鸭轮、type都繼承了object臣淤,所以object是最頂層的基類
type是本身的對(duì)象(實(shí)例),object窃爷、list邑蒋、str、dict按厘、tuple都是type的對(duì)象医吊,所以type創(chuàng)建了所有的對(duì)象
綜合1、2可知逮京,一切皆對(duì)象的同時(shí)又繼承了object類卿堂,這就是python的靈活之處,Python的面向?qū)ο蟾訌氐?/p>
下面是驗(yàn)證的例子, #后面表示運(yùn)行結(jié)果
type創(chuàng)建了所有的對(duì)象
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(對(duì)象)
以上是內(nèi)置類,現(xiàn)在我們自己創(chuàng)建來看下策严。
class Student:
pass
stu = Student()
print(type(stu)) # <class '__main__.Student'>
print(type(Student)) # <class 'type'>
結(jié)果和上面的情況一樣穗慕,type->Student->stu
class Student:
pass
#Student繼承了最頂層的object同時(shí)Student又是type的對(duì)象
Student.__bases__ # <class 'object',>
print(type(Student)) # <class 'type'>
#type是自身的對(duì)象妻导,object是type的對(duì)象
print(type(type)) # <class 'type'>
print(type(object)) # <class 'type'>
#type繼承了object類揍诽,最頂層的object的基類為空
print(type.__bases__) # <class 'object'>
print(object.__bases__) # ()
python中的常見內(nèi)置類型
對(duì)象的三個(gè)特征
- 身份
身份可以理解成在內(nèi)存中的地址诀蓉,可以通過 id() 函數(shù)查看某一個(gè)對(duì)象的身份,因?yàn)閷?duì)象是分配在內(nèi)存當(dāng)中的暑脆。相當(dāng)于指針指向?qū)ο蟆?/li>
a = 1
print(id(a)) # a 的地址 1493816368
b = []
print(id(b)) # b 的地址 134273344
- 類型
比如上方的 a 是 int 類型的渠啤,b 的類型是 list 。 - 值
上方的 1 就是 a 的值添吗。
python 的類型
None(全局只有一個(gè))
python在解釋器啟動(dòng)的時(shí)候生成一個(gè)None 對(duì)象沥曹。
In [1]: a = None
In [2]: b = None
In [3]: id(a) == id(b)
Out[3]: True
這里 a 和 b 都指向python解釋器中唯一的一個(gè)None對(duì)象。
數(shù)值
- int
- float
- complex(復(fù)數(shù))
- bool(True/False)
迭代類型
可以用for循環(huán)來遍歷
序列類型
- list
- bytes碟联、bytearray妓美、memonyview(二進(jìn)制序列)
- range
- tuple
- str
- array
映射類型
dict 字典,有key-value
集合
- set
- frozenset(不可變類型)
上下文管理類型
也就是 with 語句
其他
- 模塊類型鲤孵、 class和實(shí)例壶栋、 函數(shù)類型、方法類型普监、代碼類型贵试、object對(duì)象、type類型凯正、elipsis(省略號(hào)) 類型毙玻、notimplemented類型