# coding: utf-8
# python2中定義metaclass, 該metaclass要繼承自type, 實現__new__方法
class
metacls
(type):
def__new__
(meta, name, bases, class_dict):
print (meta, name, bases, class_dict)
if class_dict['val'] < 0:
raise valueerror('error: val[%s] < 0!!!' % class_dict['val'])
return type.__new__(meta, name, bases, class_dict)
# 使用者要通過__metaclass__變數指定要使用的metaclass
# metaclass中所編寫的驗證邏輯, 針對的是該基類的子類, 而非基類本身
class
basecls
(object):
__metaclass__ = metacls
val = none
# 驗證成功
class
derived1cls
(basecls):
val = 1
# 驗證失敗
class
derived2cls
(basecls):
val = -2
python main.py
# ('__main__.metacls'>, 'basecls', ('object'>,), )
# traceback (most recent call last):
# file
"main.py", line 11, in # class basecls(object):
# file
"main.py", line 7, in __new__
# raise valueerror('error: val[%s] < 0!!!' % class_dict['val'])
# valueerror: error: val[none] < 0!!!
《effective python》第33條, 用元類來驗證子類 python使用元類驗證子類
元類是python比較高階的用法,簡而言之,元類就是建立類的類。而type就是乙個元類,是用來建立類物件的類。因此,要定義元類就要使其繼承type類。通常情況下,開發者在使用oop的方式程式設計時,往往會用到 init 方法,即建構函式。該方法會在類初始化時執行。但是我們可以將驗證的時機提前,以至於...
python當中的metaclass使用
type class name,base class,attrs example newclass type newcls a newclass a.name 我們用type成功生成了乙個類,他的意義在於,我可以在程式執行的過程中,使用 動態的去定義乙個類 區別於那種傳統的先用class定義完你用的...
子類建構函式中呼叫虛函式問題驗證
一 問題 大家是否有在子類或基類建構函式中呼叫虛函式的情況呢?語法是否支援?執 況如何呢?為什麼呢?二 問題驗證 這個問題的最好答案是親自寫個demo除錯下看看結果如何,下面是demo vs2019 1 class base 7virtual void func 10 1112 class d pu...