1. 程式人生 > >python中的一切皆對象

python中的一切皆對象

最終 init 繼承 一個 對象創建 bob 基礎 返回 one

1、函數和類是對象,是Python中的一級公民

(1)將函數和類賦值給一個變量

將函數或類賦值給一個變量,就可以把該變量當成函數或類來使用

 1 def ask(name):
 2     print(name)
 3 class Person:
 4     def __init__(self):
 5         print("hello bobby")
 6 print("-----函數賦值給變量-------")
 7 my_func = ask
 8 # 變量當成函數使用
 9 my_func("bobby")
10 print("---------類賦值給變量-----
") 11 my_class = Person 12 # 變量當成類使用 13 # 類實例化即會調用初始化函數 14 my_class()

(2)可以將對象(函數和類)添加到集合對象中

def ask(name="bobby"):
    print(name)
class Person:
    def __init__(self):
        print("hello bobby")
print("-----函數和類可以添加到集合對象中去---")
obj_list = []
obj_list.append(ask)
obj_list.append(Person)
for item in obj_list: #打印函數和類中的東西,並且打印它們返回的東西 print(item()) ‘‘‘ 輸出結果 bobby None---ask()函數沒有返回值,故函數返回None hello bobby <__main__.Person object at 0x0219F8D0>-----類的返回(實際是init函數的返回),Person()實例化後返回一個對象(函數返回對象) ‘‘‘

(3)補充實例:函數可以返回None,可以返回一個對象,也可以返回一個函數(裝飾器實現原理)

def ask(name="bobby
"): print(name) print("-----函數可以返回一個函數---") def decorator_func(): print("我是一個函數") return ask my_ask = decorator_func() my_ask("Tom") ‘‘‘ 輸出結果 我是一個函數 Tom ‘‘‘

(4)函數和類可以作為參數傳遞給函數

def ask(name="bobby"):
    print("傳遞一個函數")
class Person:
    def __init__(self):
        print("傳遞一個類")
print("---函數和類可以作為參數傳遞給函數---")
def chuandi(content):
    content()
# 傳遞函數
chuandi(ask)
# 傳遞類
chuandi(Person)
‘‘‘
輸出結果
傳遞一個函數
傳遞一個類
‘‘‘

(5)函數和類可以當作函數的返回值

def ask(name="bobby"):
    print(name)
class Person:
    def __init__(self):
        print("返回一個類")
print("-----函數可以返回一個函數和類---")
def decorator_func():
    print("我是一個函數")
    return ask
my_ask = decorator_func()
my_ask("返回一個函數")
def decorator_func1():
    print("我是一個函數")
    return Person
my_person = decorator_func1()
my_person()
‘‘‘
輸出結果
我是一個函數
返回一個函數
我是一個函數
返回一個類
‘‘‘

2、type、object和class的關系

(1)type->class->obj

類(class)是由type類生成的一個對象,平時所熟悉的對象obj是由類(class)對象創建的一個對象

type兩種用法:一,生成一個類;二,返回一個對象的類型

(1.1)返回對象的類型

技術分享圖片

1是一個int類的對象,類本身也是一個對象,由type(int)知,int是type類的對象,因此生成過程是type->int->1

技術分享圖片

abc是str類的對象,類本身也是一個對象,由type(str)知,str是type類的對象,因此生成過程是type->str->abc

技術分享圖片

自己創建的類也符合該邏輯,type生成類對象(內置的類或自定義的類),類對象產生實例

(2)object是所有類都要繼承的最頂層的一個基礎類

__base__查看類的基類

技術分享圖片

(3)type也是一個類,同時type也是一個對象

type的基類也是object

技術分享圖片

object是所有類的基類,類同時也是對象,由type(object)知object是由type生成的

技術分享圖片

object之上,沒有基類

技術分享圖片

(4)type、class、object關系圖

技術分享圖片

(4.1)內部類以及自定義類默認繼承object,object是所有類的一個基類,type也繼承它

(4.2)object是type的實例,list等所有的內置類和自定義類都是由type創建的,type創建了所有對象(函數和類等)。如,list是一個類,它也是一個對象的原因在於,它是由type創建的,所以類也是對象(設計原因:類加載到內存後不能修改,而對象則能隨時修改,比較方便)

(4.3)object是type的實例,type繼承了object,type也是type自身的實例,其他都是type的實例,故一切皆對象

object是所有類的基類,所有的類最終往上追溯都繼承它,object繼承為空

type既是一個類又是一個對象,所有的類往上追溯都是由type創建的,包括它自己

python中的一切皆對象