1. 程式人生 > >python入門系列:Python中一切皆對象

python入門系列:Python中一切皆對象

函數名 發現 註意 lib 類型 運行 學習 rar float

引言

Java語言也是面向對象的語言,但是Python要更加徹底
Python的面向對象特性,是它使用起來靈活的根本所在
對象的特點

可以賦值給一個變量

函數也是對象

def test(name):
print(name)

my_func = test # 註意 只寫函數名 和 函數名加括號 的區別
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

可以作為參數傳遞給函數

def plus(a, b):
print(a+b)

def calculate(method, a, b):
method(a, b)
calculate(plus, 1, 2)

result:

3

可以當做函數的返回值

這也是裝飾器的原理

def inner():
print("MetaTian")

def deco():
print("decorating...")
return inner

my_func = deco()
my_func()

result:

decorating...

MetaTian

對象的3個屬性

身份:在內存中的地址是多少,可用id()函數查看
類型:是什麽類型的對象,可用type()函數查看
值:對象中的內容是什麽
type object和class的關系

type和class

關系:type -> class -> obj,obj是我們平時使用的對象,它由class對象生成,可以是我們自定義的類,也可以是內建的類。上面說了,一切皆對象,class也是以type為模板,生成的對象。

type()函數,當傳入一個參數時,返回對象的類型。傳入三個參數時,用來生成一個類。具體的參數情況和使用方式可以查閱官方文檔:docs.python.org/3/library/functions.html#type

print(type(1))
print(type(int))

result:

<class ‘int‘>

<class ‘type‘>

class Person:
pass
student = Person()
print(type(student))
print(type(Person))

result:

<class ‘main.Person‘>

<class ‘type‘>

print(type(type))

result:

<class ‘type‘>

type是以它自己為類生成的一個對象。如果熟悉靜態語言,這似乎並不好理解,但是對動態語言來說就是這麽自然。

object

object是最根本的一個基類,如果自己定義的類沒有顯示地去繼承某一個類,則它會自動繼承object。上面討論的是類和對象之間的關系,現在要討論的是類和類之間的關系。

class Person:
pass
class Student(Person):
pass
print(Student.bases)
print(Person.bases)
print(int.bases)
print(object.bases)

result:

(<class ‘main.Person‘>,)

(<class ‘object‘>,)

(<class ‘object‘>,)

()

print(type.bases)
print(type(object)

result:

(<class ‘object‘>,)

<class ‘type‘>

type是一個類,它繼承的是object,object作為一個對象又是以type為類型生成的。

總結
技術分享圖片
常見的內置類型

None

全局只有一個
就是內存中的某一塊區域
數值

int
float
complex
bool
叠代類型

序列類型

list
tuple
range
str
映射類型

dict
集合類型

set
frozenset
上下文管理類型

with
其他

模塊類型
class 和實例
函數類型
方法類型
代碼類型
object
type
...
小結

綜合上面的幾點討論,可以看到Python和其他的靜態語言是大不相同。一切皆對象的設計思想,讓Python程序的編寫異常靈活,但是相比靜態語言,它也丟失了一定的嚴謹性,有很多錯誤,我們只能夠在代碼的運行過程中才能發現。但這些動態語言的通病並未影響我們開發效率的提升。

註:喜歡python + qun:839383765 可以獲取Python各類免費最新入門學習資料!

python入門系列:Python中一切皆對象