python物件導向思想的最深處 元類

2021-09-13 12:53:53 字數 1557 閱讀 2193

在python中一切皆物件,物件是例項化的類,而類的背後就是元類,如果說類創造了例項化物件,那麼元類就創造了類,元類是類的抽象,這就是元類的概念。

如何看乙個類的類,我們可以通過class屬性追溯,例項化當前物件的類,也可以追溯建立當前類的類。

a = 3

a.__class__

a.__class__.__class__

b = [1, 2]

b.__class__

b.__class__.__class__

通過對例項化物件的追溯,我們可以看到int型別是例項化類是int建立的,int的建立物件是type,那麼也就是python中所有物件的元類都是type,都是通過type來建立的的。

那麼我們就該知道為什麼type可以獲得乙個例項化物件的型別,但是卻不推薦我們使用type來求證乙個物件的型別,因為type是對傳入物件的一次例項化得到乙個類,這個類是創造這個例項化物件的中間類,它代表了這個例項化物件的型別。

a = 3

a.__class__

type(a)

這就是為什麼乙個物件使用class可以獲得他的型別,同樣使用type()也可以獲得他的型別,乙個是追溯,乙個是元類例項化。

那麼如何使用元類建立類?這就需要type,建立方式是type(類名, 由父類名稱組成的元組(針對繼承的情況,可以為空),包含屬性的字典(名稱和值))

def a(self):

print("例項化方法")

@classmethod

def b(cls):

print("類方法")

@staticmethod

def c():

print("靜態方法")

test = type("test", (), )

test.b()

類方法test.c()

靜態方法

test.name

'class'

test.__class__

d = test()

d.a()

例項化方法

d.b()

類方法d.c()

靜態方法

d.name

'class'

上面**演示了通過type建立乙個類test,並新增類屬性和方法,然後例項化該類得到a。

type是python內建屬性,它是用於預設情況下建立類,但是還有另一種情況,自定義元類,自定義元類可以是函式或者類,他們都是對type的二次封裝。

我們定義的類,他的實現過程是首先看metaclass屬性,存在該屬性,那麼通過這個屬性的值來建立類,如果不存在那麼將尋找父類中的metaclass屬性來建立類,如果父類也沒有,那麼將呼叫內建的type建立類。

影響最深的物件導向

物件導向是個老話題了,第一次接觸c 應該是99年的事情,mfc一直是雲裡霧裡的看,c 的面像物件學多了就很暈,學了很多卻成不體系,很多方法知道了為什麼。但實際應用起來感覺不是在幫我,而是自己給自己設定的障礙。實際應用中c 把物件,資料,函式幫在了一起。對跨邊界的應用限制頗多隻適合瀑布的開發模式。因為...

Python 物件導向的程式設計思想

在說物件導向的程式設計思想之前,先來回顧下一,什麼是面向過程的程式設計思想。核心是 過程 二字 過程的終極奧義就是將程式流程化 過程是 流水線 用來分步驟解決問題的 核心是 物件 二字 物件的終極奧義就是將程式 整合 物件是 容器 用來盛放資料與功能的 類也是 容器 該容器用來存放同類物件共有的資料...

物件導向的思想

物件導向的好處 1.物件導向是一種更符合人們思考習慣的一種思想 2.面向過程的更多體現是執行者 物件導向更多體現的是指揮者 3.有了物件導向這個事情後 複雜問題就簡單化了 大西瓜如何用挖掘機炒菜?幾個事物 2事物 大西瓜 name age 屬性 行為 會開挖掘機 挖掘機 color lunzi 翻炒...