国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

Python反射和內(nèi)置方法重寫(xiě)操作詳解

2020-02-15 22:49:22
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(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__            
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 镇康县| 西畴县| 乃东县| 开封县| 道真| 县级市| 嵊州市| 呈贡县| 沐川县| 锡林浩特市| 马鞍山市| 东兰县| 枣阳市| 宁德市| 洮南市| 竹北市| 京山县| 武定县| 大埔区| 高安市| 贵德县| 明光市| 琼结县| 隆子县| 太仆寺旗| 襄樊市| 怀远县| 五台县| 昔阳县| 孝昌县| 襄城县| 武定县| 桃江县| 获嘉县| 姜堰市| 离岛区| 浦江县| 开化县| 明溪县| 武穴市| 武城县|