目錄其他
我們建立乙個類目的是為了建立該類的例項物件,而元類就是用來建立類的。換個理解方式就是,元類就是建立類的類。
在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 派生 的關係,虛線表...