python中的一切皆物件

2022-03-13 22:23:28 字數 3489 閱讀 1339

python中一切皆物件是這個語言靈活的根本。

函式和類也是物件,屬於python的一等公民。

包括**包和模組也都是物件。

python的物件導向更加徹底。

可以賦值給乙個變數

可以新增到集合物件中

可以作為引數傳遞給函式

可以當作函式的返回值

在python中什麼不是物件?

字串是類str的物件

數字是類int的物件

元組是類tuple的物件

列表是類list的物件

字典是類dict的物件

函式是類function的物件

類是type的物件

將乙個函式當作返回值的時候就是閉包,也就是裝飾器的實現原理。

在python中,基礎的資料型別(list,tuple,dict等)都是使用c++編寫的,所以效能會非常高。

>>> a = 1

>>>type(a)

'int

'>

>>>type(int)

'type

'>

>>> b = "

123"

>>>type(b)

'str

'>

>>>type(str)

'type

'>

>>> c = [1,2,3]

>>>type(c)

'list

'>

>>>type(list)

'type

'>

>>> d = (1,2,3)

>>>type(d)

'tuple

'>

>>>type(tuple)

'type

'>

>>> d =

>>>type(d)

'dict

'>

>>>type(dict)

'type

'>

在python中基礎資料型別有:字串、數字、元組、列表、字典、集合等

它們分別由類str、int、tuple、list、dist、set例項出來的物件。

而類str、int、tuple、list、dist、set本身也是物件,它們都是由type這個創造創造出來的。

對於函式來說:

函式都是由類function創造出來的。

>>> def

func():

...

pass

...>>>type(func)

'function

'>

>>>type(func())

'nonetype

'>

>>>type(function)

traceback (most recent call last):

file

"", line 1, in

nameerror: name

'function'is

not defined

問題:function這個類是怎麼來的了?如果function是乙個物件,那麼為什麼不能使用type列印型別。

原因也許是function超出了type的範圍,因為它不是type創造的。類似的還有nonetype

對於類來說:

類都是由type創造出來

>>> class

person:

...

pass

...>>>type(person)

'type

'>

>>> type(person()) #

物件由類建立

'__main__.person

'>

既然type創造了如此多的類,那麼type是怎麼來的?

>>>type(type)

'type

'> #

自己創造自己

在python中,type有兩個功能:

a.列印物件的型別

b.創造類

雖然上述**並沒有解釋清楚一切物件的**,但是很多的說明了type和class的關係——「type就是用來創造類的」

>>> print(int.__bases__)(

'object

'>,)

>>> print(str.__bases__)(

'object

'>,)

>>> print(person.__bases__) #

預設繼承object

('object

'>,)

>>> class

anluperson(person):

...

pass

...>>> print(anluperson.__bases__)(

'__main__.person

'>,)

object是最頂層的基類。

>>> print(type.__bases__) #

type的父類是object

('object

'>,)

>>> type(object) #

object又是由type創造出來的

'type

'>

>>> print(object.__bases__)()

>>> type(type) #

type自己創造自己

'type

'>

關於type、object、class之間的關係示意圖:

在python中,基礎資料型別的類都是type的例項,type自生也是type的例項。

基礎資料型別的類都是繼承object。

對於function等先不管,我們可以說一切皆物件,一切都是type的物件,object是所有類的基類。

1.none 全域性只有乙個

2.數值

• int

• float

• complex

• bool

3.迭代型別

4.序列型別

• list

• bytes、bytearray、memoryview(二進位制序列)

• range

• tuple

• str

• array

5.對映(dict)

6.集合型別 dict與set實現原理相似,效能很高

• set

• frozenset

7.上下文管理型別(with)

8.其它

• 模組型別

• class和例項

• 函式型別

• 方法型別

• **型別

• object型別

• type型別

• ellipsis型別(省略號)

• notimplemented型別

python 一切皆物件

在python中有一句話 一切皆物件 其實在剛開始接觸python的時候對這句話完全不理解,即使是看完了python基礎教程也沒有很好的理解這句話的含義。直到看了python的原始碼才對這部分有了更深入的理解。我的入門指導書是 python原始碼剖析深度探索動態語言核心技術 在python中下列語句...

Python 一切皆物件

學習筆記 class dxiang def ff self print 這是物件的方法 one方法 def common canshu 定義乙個方法在類之外 print 這是乙個普通的方法的引數 canshu common 2 呼叫函式方法 dxiang.method common 類的方法增加乙個...

一切皆物件

description 一切都是物件 everything is an object。所以,現在定義乙個類thing,來描述世界上所有有名字的事物。該類只有建構函式 拷貝建構函式和析構函式,並具有乙個字串資料成員來儲存其名字。input 輸入只有1行,是乙個沒有空白符的字串。output 見樣例。s...