引言
Java語(yǔ)言也是面向?qū)ο蟮恼Z(yǔ)言,但是Python要更加徹底
Python的面向?qū)ο筇匦缘疲撬褂闷饋?lái)靈活的根本所在
對(duì)象的特點(diǎn)
可以賦值給一個(gè)變量
# 函數(shù)也是對(duì)象
def test(name):
print(name)
my_func = test # 注意 只寫(xiě)函數(shù)名 和 函數(shù)名加括號(hào) 的區(qū)別
my_func("MetaTian") # 打印:MetaTian
可以添加到集合中去
def plus(a, b):
print(a+b)
def minus(a, b):
print(a-b)
fun_list = []
fun_list.append(plus)
fun_list.append(minus)
for item in fun_list:
item(2, 1)
# result:
# 3
# 1
可以作為參數(shù)傳遞給函數(shù)
def plus(a, b):
print(a+b)
def calculate(method, a, b):
method(a, b)
calculate(plus, 1, 2)
# result:
# 3
可以當(dāng)做函數(shù)的返回值
# 這也是裝飾器的原理
def inner():
print("MetaTian")
def deco():
print("decorating...")
return inner
my_func = deco()
my_func()
# result:
# decorating...
# MetaTian
對(duì)象的3個(gè)屬性
身份:在內(nèi)存中的地址是多少矫户,可用id()函數(shù)查看
類(lèi)型:是什么類(lèi)型的對(duì)象残邀,可用type()函數(shù)查看
值:對(duì)象中的內(nèi)容是什么
type object和class的關(guān)系
type和class
關(guān)系:type -> class -> obj,obj是我們平時(shí)使用的對(duì)象芥挣,它由class對(duì)象生成,可以是我們自定義的類(lèi)空免,也可以是內(nèi)建的類(lèi)盆耽。上面說(shuō)了蹋砚,一切皆對(duì)象摄杂,class也是以type為模板,生成的對(duì)象析恢。
type()函數(shù),當(dāng)傳入一個(gè)參數(shù)時(shí)映挂,返回對(duì)象的類(lèi)型。傳入三個(gè)參數(shù)時(shí)柑船,用來(lái)生成一個(gè)類(lèi)。具體的參數(shù)情況和使用方式可以查閱官方文檔:docs.python.org/3/library/functions.html#type
print(type(1))
print(type(int))
# result:
#
#
class Person:
pass
student = Person()
print(type(student))
print(type(Person))
# result:
#
#
print(type(type))
# result:
#
type是以它自己為類(lèi)生成的一個(gè)對(duì)象亏拉。如果熟悉靜態(tài)語(yǔ)言历恐,這似乎并不好理解专筷,但是對(duì)動(dòng)態(tài)語(yǔ)言來(lái)說(shuō)就是這么自然弱贼。
object
object是最根本的一個(gè)基類(lèi),如果自己定義的類(lèi)沒(méi)有顯示地去繼承某一個(gè)類(lèi)磷蛹,則它會(huì)自動(dòng)繼承object吮旅。上面討論的是類(lèi)和對(duì)象之間的關(guān)系,現(xiàn)在要討論的是類(lèi)和類(lèi)之間的關(guān)系味咳。
class Person:
pass
class Student(Person):
pass
print(Student.__bases__)
print(Person.__bases__)
print(int.__bases__)
print(object.__bases__)
# result:
# (,)
# (,)
# (,)
# ()
print(type.__bases__)
print(type(object)
# result:
# (,)
#
type是一個(gè)類(lèi)庇勃,它繼承的是object槽驶,object作為一個(gè)對(duì)象又是以type為類(lèi)型生成的责嚷。
總結(jié)
常見(jiàn)的內(nèi)置類(lèi)型
None
全局只有一個(gè)
就是內(nèi)存中的某一塊區(qū)域
數(shù)值
int
float
complex
bool
迭代類(lèi)型
序列類(lèi)型
list
tuple
range
str
映射類(lèi)型
dict
集合類(lèi)型
set
frozenset
上下文管理類(lèi)型
with
其他
模塊類(lèi)型
class 和實(shí)例
函數(shù)類(lèi)型
方法類(lèi)型
代碼類(lèi)型
object
type
...
小結(jié)
綜合上面的幾點(diǎn)討論罕拂,可以看到Python和其他的靜態(tài)語(yǔ)言是大不相同全陨。一切皆對(duì)象的設(shè)計(jì)思想爆班,讓Python程序的編寫(xiě)異常靈活柿菩,但是相比靜態(tài)語(yǔ)言雨涛,它也丟失了一定的嚴(yán)謹(jǐn)性,有很多錯(cuò)誤替久,我們只能夠在代碼的運(yùn)行過(guò)程中才能發(fā)現(xiàn)。但這些動(dòng)態(tài)語(yǔ)言的通病并未影響我們開(kāi)發(fā)效率的提升侣肄。
注:喜歡python + qun:839383765 可以獲取Python各類(lèi)免費(fèi)最新入門(mén)學(xué)習(xí)資料!