python中的元類

2022-08-30 12:03:10 字數 2568 閱讀 3138

目錄其他

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

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

python中type的用法

,用法如下:

tpye(name, bases, dict)

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

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

>>> age = 10

>>> print(age.__class__)

>>> name = "zhangsan"

>>> print(name.__class__)

>>> def foo():

... pass

...>>> print(foo.__class__)

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

>>> print(age.__class__.__class__)

>>> print(name.__class__.__class__)

>>> print(foo.__class__.__class__)

可以得出所有類都是通過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"

def say(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"

def say(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中的元類大家都可能比較很陌生,因為大家都聽說過99 的情況下是用不到元類的,但是大家對類確很了解,大家都知道在python中萬物皆物件,那麼python中的類是不是物件呢?物件的樣子 1,物件可以在程式中動態的進行建立,python的語言動態特性。2,物件可以通過 class 獲取該物件...

Python 中的元類

如果看完以後還是感覺莫名其妙,執行這樣乙個demo 可能會對你有所幫助 元類程式設計在我看來,如果你想開發一些框架,可以嘗試一下 class upperattrmetaclass type type dict def new cls,cls name,bases,attr dict news cls...

Python中的元類 metaclass

在wiki上面,metaclass是這樣定義的 in object oriented programming,a metaclass is a class whose instances are classes.python中物件模型如下圖 其中,實線表示 is kind of 派生 的關係,虛線表...