最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2018年08月27日 15:02:02   作者:—super—  
這篇文章主要介紹了Python反射和內(nèi)置方法重寫,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python反射概念、原理及內(nèi)置方法重寫相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Python反射和內(nèi)置方法重寫操作。分享給大家供大家參考,具體如下:

isinstance和issubclass

isinstance(obj,cls)檢查是否obj是否是類 cls 的對(duì)象,類似 type()

class Foo(object):
  pass
obj = Foo()
isinstance(obj, Foo)

issubclass(sub, super)檢查sub類是否是 super 類的派生類

class Foo(object):
 pass
class Bar(Foo):
 pass
issubclass(Bar, Foo)

反射

1 什么是反射

反射的概念是由Smith在1982年首次提出的,主要是指程序可以訪問(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']=18
f1['age1']=19
del f1.age1
del 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.obj
a = 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ì)象 = 類名() ;而對(duì)于 __call__ 方法的執(zhí)行是由對(duì)象后加括號(hào)觸發(fā)的,即:對(duì)象() 或者 類()()

class Foo:
 def __init__(self):
  pass
 def __call__(self, *args, **kwargs):
  print('__call__')
obj = Foo() # 執(zhí)行 __init__
obj()  # 執(zhí)行 __call__

運(yùn)行輸出:

__call__

__len__

class A:
 def __init__(self):
  self.a = 1
  self.b = 2
 def __len__(self):
  return len(self.__dict__)
a = A()
print(len(a))

運(yùn)行結(jié)果:

2

__hash__

class A:
 def __init__(self):
  self.a = 1
  self.b = 2
 def __hash__(self):
  return hash(str(self.a)+str(self.b))
a = A()
print(hash(a))

運(yùn)行結(jié)果:

-1777982230

__eq__

class A:
 def __init__(self):
  self.a = 1
  self.b = 2
 def __eq__(self,obj):
  if self.a == obj.a and self.b == obj.b:
   return True
a = A()
b = A()
print(a == b)

運(yùn)行結(jié)果:

True

合并名字性別一樣的人:

class Person:
 def __init__(self,name,age,sex):
  self.name = name
  self.age = age
  self.sex = sex
 def __hash__(self):
  return hash(self.name+self.sex)
 def __eq__(self, other):
  if self.name == other.name and self.sex == other.sex:return True
p_lst = []
for i in range(84):
 p_lst.append(Person('egon',i,'male'))
print(p_lst)
print(set(p_lst))

運(yùn)行結(jié)果:

[<__main__.Person object at 0x01425AB0>, <__main__.Person object at 0x01425AD0>, <__main__.Person object at 0x01425AF0>, <__main__.Person object at 0x01425910>, <__main__.Person object at 0x014258D0>, <__main__.Person object at 0x01425950>, <__main__.Person object at 0x01425970>, <__main__.Person object at 0x014259D0>, <__main__.Person object at 0x01425C70>, <__main__.Person object at 0x01425890>, <__main__.Person object at 0x01425B30>, <__main__.Person object at 0x01425BB0>, <__main__.Person object at 0x01425C30>, <__main__.Person object at 0x01429710>, <__main__.Person object at 0x01429730>, <__main__.Person object at 0x014298F0>, <__main__.Person object at 0x01429910>, <__main__.Person object at 0x01429930>, <__main__.Person object at 0x01429950>, <__main__.Person object at 0x01429970>, <__main__.Person object at 0x01429990>, <__main__.Person object at 0x014299B0>, <__main__.Person object at 0x014299D0>, <__main__.Person object at 0x014299F0>, <__main__.Person object at 0x01429A10>, <__main__.Person object at 0x01429A30>, <__main__.Person object at 0x01429A50>, <__main__.Person object at 0x01429A70>, <__main__.Person object at 0x01429A90>, <__main__.Person object at 0x01429AB0>, <__main__.Person object at 0x01429AD0>, <__main__.Person object at 0x01429AF0>, <__main__.Person object at 0x01429B10>, <__main__.Person object at 0x01429B30>, <__main__.Person object at 0x01429B50>, <__main__.Person object at 0x01429B70>, <__main__.Person object at 0x01429B90>, <__main__.Person object at 0x01429BB0>, <__main__.Person object at 0x01429BD0>, <__main__.Person object at 0x01429BF0>, <__main__.Person object at 0x01429C10>, <__main__.Person object at 0x01429C30>, <__main__.Person object at 0x01429C50>, <__main__.Person object at 0x01429C70>, <__main__.Person object at 0x01429C90>, <__main__.Person object at 0x01429CB0>, <__main__.Person object at 0x01429CD0>, <__main__.Person object at 0x01429CF0>, <__main__.Person object at 0x01429D10>, <__main__.Person object at 0x01429D30>, <__main__.Person object at 0x01429D50>, <__main__.Person object at 0x01429D70>, <__main__.Person object at 0x01429D90>, <__main__.Person object at 0x01429DB0>, <__main__.Person object at 0x01429DD0>, <__main__.Person object at 0x01429DF0>, <__main__.Person object at 0x01429E10>, <__main__.Person object at 0x01429E30>, <__main__.Person object at 0x01429E50>, <__main__.Person object at 0x01429E70>, <__main__.Person object at 0x01429E90>, <__main__.Person object at 0x01429EB0>, <__main__.Person object at 0x01429ED0>, <__main__.Person object at 0x01429EF0>, <__main__.Person object at 0x01429F10>, <__main__.Person object at 0x01429F30>, <__main__.Person object at 0x01429F50>, <__main__.Person object at 0x01429F70>, <__main__.Person object at 0x01429F90>, <__main__.Person object at 0x01429FB0>, <__main__.Person object at 0x01429FD0>, <__main__.Person object at 0x01429FF0>, <__main__.Person object at 0x01751030>, <__main__.Person object at 0x01751050>, <__main__.Person object at 0x01751070>, <__main__.Person object at 0x01751090>, <__main__.Person object at 0x017510B0>, <__main__.Person object at 0x017510D0>, <__main__.Person object at 0x017510F0>, <__main__.Person object at 0x01751110>, <__main__.Person object at 0x01751130>, <__main__.Person object at 0x01751150>, <__main__.Person object at 0x01751170>, <__main__.Person object at 0x01751190>]
{<__main__.Person object at 0x01425AB0>}

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python面向?qū)ο蟪绦蛟O(shè)計(jì)入門與進(jìn)階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門與進(jìn)階經(jīng)典教程

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Pytorch 實(shí)現(xiàn)權(quán)重初始化

    Pytorch 實(shí)現(xiàn)權(quán)重初始化

    今天小編就為大家分享一篇Pytorch 實(shí)現(xiàn)權(quán)重初始化,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • python圖形開(kāi)發(fā)GUI庫(kù)pyqt5的詳細(xì)使用方法及各控件的屬性與方法

    python圖形開(kāi)發(fā)GUI庫(kù)pyqt5的詳細(xì)使用方法及各控件的屬性與方法

    這篇文章主要介紹了python圖形開(kāi)發(fā)GUI庫(kù)pyqt5的詳細(xì)使用方法及各控件的屬性與方法,需要的朋友可以參考下
    2020-02-02
  • Pycharm導(dǎo)入anaconda環(huán)境的教程圖解

    Pycharm導(dǎo)入anaconda環(huán)境的教程圖解

    這篇文章主要介紹了Pycharm導(dǎo)入anaconda環(huán)境的教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • python中的flask_sqlalchemy的使用及示例詳解

    python中的flask_sqlalchemy的使用及示例詳解

    文章主要介紹了在使用SQLAlchemy創(chuàng)建模型實(shí)例時(shí),通過(guò)元類動(dòng)態(tài)創(chuàng)建實(shí)例的方式,并說(shuō)明了如何在實(shí)例化時(shí)執(zhí)行__init__方法,此外,還討論了SQLAlchemy的事務(wù)處理和回滾機(jī)制,以及如何進(jìn)行數(shù)據(jù)庫(kù)的基本操作,包括插入、修改、刪除和查詢,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • Python reduce函數(shù)作用及實(shí)例解析

    Python reduce函數(shù)作用及實(shí)例解析

    這篇文章主要介紹了Python reduce函數(shù)作用及實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • python運(yùn)維自動(dòng)化Paramiko的實(shí)現(xiàn)示例

    python運(yùn)維自動(dòng)化Paramiko的實(shí)現(xiàn)示例

    Paramiko是Python的SSH庫(kù),提供SSHClient和SFTPClient類,用于遠(yuǎn)程命令執(zhí)行及文件傳輸,支持連接、執(zhí)行、上傳下載,適用于自動(dòng)化部署等場(chǎng)景,下面就來(lái)詳細(xì)介紹一下Paramiko的使用
    2025-08-08
  • Python使用cookielib模塊操作cookie的實(shí)例教程

    Python使用cookielib模塊操作cookie的實(shí)例教程

    cookielib模塊經(jīng)常被用來(lái)和urllib等模塊配合來(lái)制作爬蟲或者第三方SNS客戶端等程序,比如這里我們就將舉一個(gè)使用cookie來(lái)發(fā)送登錄信息登錄人人網(wǎng)的例子,well,一起來(lái)看一下Python使用cookielib模塊操作cookie的實(shí)例教程
    2016-07-07
  • python簡(jiǎn)易實(shí)現(xiàn)任意位數(shù)的水仙花實(shí)例

    python簡(jiǎn)易實(shí)現(xiàn)任意位數(shù)的水仙花實(shí)例

    今天小編就為大家分享一篇python簡(jiǎn)易實(shí)現(xiàn)任意位數(shù)的水仙花實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • 解決PyCharm import torch包失敗的問(wèn)題

    解決PyCharm import torch包失敗的問(wèn)題

    今天小編就為大家分享一篇解決PyCharm import torch包失敗的問(wèn)題。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • python實(shí)現(xiàn)給字典添加條目的方法

    python實(shí)現(xiàn)給字典添加條目的方法

    這篇文章主要介紹了python實(shí)現(xiàn)給字典添加條目的方法,是比較實(shí)用的字典操作技巧,實(shí)例備有簡(jiǎn)單的注釋,需要的朋友可以參考下
    2014-09-09

最新評(píng)論

白山市| 温宿县| 扬州市| 中宁县| 赣榆县| 隆安县| 来宾市| 盈江县| 禹州市| 甘洛县| 巴马| 绩溪县| 得荣县| 安福县| 沭阳县| 郓城县| 慈利县| 亚东县| 吉隆县| 漯河市| 迁安市| 色达县| 进贤县| 石嘴山市| 德昌县| 邵武市| 安西县| 日喀则市| 都江堰市| 明溪县| 浦东新区| 隆尧县| 潜江市| 德安县| 陇川县| 大宁县| 西畴县| 屏山县| 东至县| 崇文区| 梓潼县|