元類是python比較高階的用法,簡而言之,元類就是建立類的類。
而type就是乙個元類,是用來建立類物件的類。
因此,要定義元類就要使其繼承type類。
通常情況下,開發者在使用oop的方式程式設計時,往往會用到__init__方法,即建構函式。該方法會在類初始化時執行。但是我們可以將驗證的時機提前,以至於提前到類建立之時,因此就會用到__new__方法。
class base(type):
def __new__(cls, name, param, dicts):
print(cls)
print(name)
print(param)
print(dicts)
return super().__new__(cls, name, param, dicts)
class meta(metaclass=base):
name = 'yang'
def person(self):
pass
meta()
meta
()
注意,元類中所編寫的驗證邏輯,針對的是該基類的子類,而不是基類本身。
__new__()
方法接收到的引數依次是:
當前準備建立的類的物件;
類的名字;
類繼承的父類集合;
類的方法集合。
class base(type):
def __new__(cls, name, bases, attrs):
# print(cls)
print(name)
print(bases)
print(attrs)
return super().__new__(cls, name, bases, attrs)
class people:
pass
class meta(people, metaclass=base):
name = 'yang'
def person(self):
return self.name
meta()
meta
(,)
使用metaclass驗證子類
coding utf 8 python2中定義metaclass,該metaclass要繼承自type,實現 new 方法 class metacls type def new meta,name,bases,class dict print meta,name,bases,class dict i...
python元類的使用 python使用元類
原文 type 動態語言和靜態語言最大的不同,就是函式和類的定義,不是編譯時定義的,而是執行時動態建立的。比方說我們要定義乙個hello的class,就寫乙個hello.py模組 當python直譯器載入hello模組時,就會依次執行該模組的所有語句,執行結果就是動態建立出乙個hello的class...
python元類的使用 Python的元類如何使用
這次給大家帶來python的元類如何使用,使用python元類的注意事項有哪些,下面就是實戰案例,一起來看一下。今天我的任務就是徹底明白什麼是元類,一起看看。要搞懂元類,我們還是先從物件說起。python 一切皆物件,這句話你一定有聽說過 現在你就聽說了 乙個數字是物件,乙個字串是物件,乙個列表是物...