python建立乙個元類

2021-08-28 07:40:25 字數 3217 閱讀 6868

其他我們建立乙個類目的是為了建立該類的例項物件,而元類就是用來建立類的。換個理解方式就是,元類就是建立類的類。

在python中可以使用type函式建立乙個類,參考

python中type的用法

,用法如下:

tpye(name, bases, dict)

實際上type()函式就是乙個元類,是python預設用來建立所有類的元類。

類似於str是建立字串物件的類,int是建立整形物件的類,type就是用來建立類物件的類。可以通過__class__屬性來檢視物件是由誰建立的:

>>

> age =

10>>

>

print

(age.__class__)

<

class

'int'

>

>>

> name =

"zhangsan"

>>

>

print

(name.__class__)

<

class

'str'

>

>>

>

deffoo()

:...

pass..

.>>

>

print

(foo.__class__)

<

class

'function'

>

可以看出所有物件都是由類建立的,這些類又是誰建立的?可以列印下__class____class__屬性:

>>

>

print

(age.__class__.__class__)

<

class

'type'

>

>>

>

print

(name.__class__.__class__)

<

class

'type'

>

>>

>

print

(foo.__class__.__class__)

<

class

'type'

>

可以得出所有類都是通過type類建立的, 而type就是python自帶的元類。

建立自定義元類之前,需要先了解乙個屬性,__metaclass__屬性,了解__metaclass__之前需要先了解python類的建立流程…

__metaclass__屬性用來指定當前類的元類,所以我們可以指定__metaclass__屬性的值,來自定義元類。自定義元類可以是乙個類也可以是乙個函式,他只需要像type函式一樣,接收name, bases, dict三個引數,並在處理完畢之後呼叫type函式,並返回type函式建立好的類物件即可。

使用方法:

python2:

class

foo(

object):

# 設定foo類的元類為add_property

__metaclass__ = add_property

python3:

# 設定foo類的元類為add_property

class

foo(metaclass=add_property)

:pass

使用函式建立元類

使用自定義元類給類增加屬性:

def

add_property

(name, bases,

dict):

"""給類增加屬性"""

age =

18 name =

"zhangsan"

defsay

(self)

:print

(age)

print

(name)

dict

=return

type

(name, bases,

dict

)# 設定user類的元類為add_property

class

user

(metaclass=add_property)

:pass

user = user(

)user.say(

)

執行結果:

18

zhangsan

使用類建立元類

使用自定義元類給類增加屬性:

class

add_property

:def

__new__

(self, name, bases,

dict):

"""給類增加屬性"""

age =

18 name =

"zhangsan"

defsay

(self)

:print

(age)

print

(name)

dict

=return

type

(name, bases,

dict

)# 設定user類的元類為add_property

class

user

(metaclass=add_property)

:pass

user = user(

)print

(user.age)

user.say(

)

執行結果:

18

zhangsan

通過元類建立乙個Python類

最開始學python的時候我們定義類都是 class classname pass當熟悉了元類的概念之後我們可以這樣建立 classname type classname 當有父類的時候 class classname object pass等價於 classname type classname ...

python 動態建立乙個類

class animal def eat self print eat class dog animal pass wangcai dog wangcai.eat 輸出 eat cat type cat animal,xiaohuamao cat xiaohuamao.eat 輸出 eat 元類就是...

建立乙個類

c 是一門物件導向的程式語言,而物件導向的基礎就是類 使用c 建立乙個student類 class student 學生類 輸出學生的資訊 void outputstudent void void student input char name,int age,int no void student...