freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

python-面向?qū)ο髮W習總結(jié)-資料下載頁

2025-08-04 23:07本頁面
  

【正文】 解釋器先查找__metaclass__屬性,該屬性的值便是類的元類,如果沒有找到該屬性的定義,對于新型類則會以type(object)作為其元類,如果當前模塊有全局變量名為metaclass,則將其值作為其元類,而對于傳統(tǒng)的類,.可以有多種方法來創(chuàng)建一個元類,如利用type函數(shù),類工廠模式,或者設置__metaclass__屬性等1利用傳統(tǒng)工廠函數(shù)返回類:def class_creator(func):classinternal:passsetattr(internal,func)returninternaldef alive(self):print 39。Hi,I am here39。ChildClass = class_creator(alive)cc=ChildClass()()Hi,Iam here2通過type創(chuàng)建類def __init__(self):=39。metaclass test39。def alive(self):attrs={39。__init__39。:__init__,39。alive39。:alive}bases=()ClassTep=type(39。MetaTestClass39。,bases,attrs)t=ClassTep()()metaclasstest3設置__metaclass__屬性:只要在類定義中把__metaclass__設置為任意有著與type相同參數(shù)的可調(diào)用對象,就能夠提供自定義的元類。通常繼承typeclass Meta(type):def__init__(cls,name,bases,attrs):printI am a meta class templete,Class will be created by mesuper(Meta,cls).__init__(name,bases,attrs)defWele(cls): print wele,class MetaTest(object):__metaclass__=Metadefsayhi(self):printHiIam a meta class templete,Class will be created by me()weleMetaTestMetaTest().sayhi()Hi4利用new模塊中的類工廠:(name,baseclasses, dict)Thisfunction returns a new class object, with name name, derived frombaseclasses (which should be a tuple of classes) and with namespacedict.from new import classobjmetatest=classobj(39。Meta39。,(object,),{39。Hello39。:lambda self:39。hello39。})metatest().Hello()39。hello39。在元類中也可以定義類方法,一般叫做元方法,元方法和普通的類方法在使用上存在一定的區(qū)別,元方法能夠被元類或者元類對象(類)直接調(diào)用,但不能沒類的實例調(diào)用,而類方法可以被類或者類的實例直接調(diào)用。class Meta(type):def__init__(cls,name,bases,attrs):super(Meta,cls).__init__(name,bases,attrs)defWele(cls): print wele,元方法class MetaTest(object):__metaclass__=Metadefsayhi(self):printHidefgetName(cls):類方法printwhat is your named=MetaTest()(MetaTest)weleMetaTest()weleMetaTest()whatis your name(d)whatis your name()Traceback(most recent call last):Filepyshell9, line 1, in module()AttributeError:39。MetaTest39。 object has no attribute 39。Wele39。在繼承關(guān)系中,元類和普通的超類存在一定的區(qū)別,元類屬性的可用性是不會傳遞的,也就是說,元類的屬性是對它的實例是可用的,但是對它的實例的實例是不可用的。class SuperC(object):attr=39。name39。,39。age39。class Child(SuperC):pass(39。name39。,39。age39。)a=Child()(39。name39。,39。age39。)class SuperMeta(type):attr=(39。name39。,39。age39。)class ChildMeta(object):__metaclass__=SuperMetaclass Child2Meta(ChildMeta):pass(39。name39。,39。age39。)(39。name39。,39。age39。)(39。name39。,39。age39。)b=Child2Meta()Traceback(most recent call last):Filepyshell19, line 1, in moduleAttributeError:39。Child2Meta39。 object has no attribute 39。attr39。在元類的多繼承中,通常會產(chǎn)生沖突,比如A,B都是帶有元類的類,C多繼承于A和B時會產(chǎn)生沖突。如下例:class MetaA(type):passclass MetaB(type):passclass A(object):__metaclass__=MetaAclass B(object):__metaclass__=MetaBclass C(A,B):passTraceback(most recent call last):Filepyshell42, line 1, in moduleclassC(A,B):passTypeError:Error when calling the metaclass basesmetaclassconflict: the metaclass of a derived class must be a (nonstrict)subclass of the metaclasses of all its bases解決沖突的方法從利用type重新定義一個中間的元類。AB=type(AB,(MetaA,MetaB),{})classC(A,B):__metaclass__=AB
點擊復制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1