本文實(shí)例講述了Python反射和內(nèi)置方法重寫(xiě)操作。分享給大家供大家參考,具體如下:
isinstance和issubclass
isinstance(obj,cls)
檢查是否obj是否是類(lèi) cls 的對(duì)象,類(lèi)似 type()
class Foo(object): passobj = Foo()isinstance(obj, Foo)
issubclass(sub, super)
檢查sub類(lèi)是否是 super
類(lèi)的派生類(lèi)
class Foo(object): passclass Bar(Foo): passissubclass(Bar, Foo)
反射
1 什么是反射
反射的概念是由Smith在1982年首次提出的,主要是指程序可以訪(fǎng)問(wèn)、檢測(cè)和修改它本身狀態(tài)或行為的一種能力(自省)。這一概念的提出很快引發(fā)了計(jì)算機(jī)科學(xué)領(lǐng)域關(guān)于應(yīng)用反射性的研究。它首先被程序語(yǔ)言的設(shè)計(jì)領(lǐng)域所采用,并在Lisp和面向?qū)ο蠓矫嫒〉昧顺煽?jī)。
四個(gè)反射函數(shù)
hasattr(obj,str)
檢測(cè)是否含有某屬性
getattr(obj,str)
獲取屬性,不存在報(bào)錯(cuò)
setattr(obj,str,value)
設(shè)置屬性
delattr(obj,str)
刪除屬性,不存在報(bào)錯(cuò)
導(dǎo)入其他模塊,利用反射查找該模塊是否存在某個(gè)方法
def test(): print('from the test')
item系列
__getitem__
/__setitem__
/__delitem__
class Foo: def __init__(self,name): self.name=name def __getitem__(self, item): print(self.__dict__[item]) def __setitem__(self, key, value): self.__dict__[key]=value def __delitem__(self, key): print('del obj[key]時(shí),我執(zhí)行') self.__dict__.pop(key) def __delattr__(self, item): print('del obj.key時(shí),我執(zhí)行') self.__dict__.pop(item)f1=Foo('sb')f1['age']=18f1['age1']=19del f1.age1del f1['age']f1['name']='alex'print(f1.__dict__)
運(yùn)行結(jié)果:
del obj.key時(shí),我執(zhí)行
del obj[key]時(shí),我執(zhí)行
{'name': 'alex'}
__new__
class A: def __init__(self): self.x = 1 print('in init function') def __new__(cls, *args, **kwargs): print('in new function') return object.__new__(A, *args, **kwargs)a = A()print(a.x)
運(yùn)行結(jié)果:
in new function
in init function
1
單例模式:
class A: def __new__(cls): if not hasattr(cls,'obj'): cls.obj = object.__new__(cls) return cls.obja = A()b = A()print(a is b)
運(yùn)行結(jié)果:
True
__call__
對(duì)象后面加括號(hào),觸發(fā)執(zhí)行。
注:構(gòu)造方法的執(zhí)行是由創(chuàng)建對(duì)象觸發(fā)的,即:對(duì)象 = 類(lèi)名() ;而對(duì)于 __call__ 方法的執(zhí)行是由對(duì)象后加括號(hào)觸發(fā)的,即:對(duì)象()
或者 類(lèi)()()
class Foo: def __init__(self): pass def __call__(self, *args, **kwargs): print('__call__')obj = Foo() # 執(zhí)行 __init__obj() # 執(zhí)行 __call__
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注