成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > python常用的魔法方法(雙下劃線)

python常用的魔法方法(雙下劃線)

熱門標(biāo)簽:B52系統(tǒng)電梯外呼顯示E7 企業(yè)微信地圖標(biāo)注 鶴壁手機(jī)自動外呼系統(tǒng)違法嗎 萊蕪電信外呼系統(tǒng) 沈陽防封電銷電話卡 高德地圖標(biāo)注收入咋樣 地圖標(biāo)注多個 怎么辦理400客服電話 銀川電話機(jī)器人電話

前言

本文介紹一下python中常用的魔法方法以及面向?qū)ο笾蟹浅V匾膯卫J健?br />

魔法方法

python中一切皆對象,因?yàn)閜ython是面向?qū)ο蟮木幊陶Z言。python給類和對象提供了大量的內(nèi)置方法,這些內(nèi)置方法也稱魔法方法。這些魔法方法總是在某種條件下自動觸發(fā)執(zhí)行,就像魔法一樣。

__init__方法

該方法是用來接收定義類時類中__new__方法返回的空對象后為空對象進(jìn)行初始化的操作,沒有返回值。

class Test():
    def __init__(self, name):
        self.name = name
        
    def test(self):
        print(self.name)
   
t = Test('xu')
t1 = Test('python')

__new__方法

該方法是當(dāng)類被調(diào)用實(shí)例化對象時首先被觸發(fā)的方法,用來實(shí)例化一個空對象并返回。

class Test():
    def __new__(cls,*args, **kwargs):
        return object.__new__(cls, *args, **kwargs) 
    
    def __init__(self, name):
        self.name = name

__call__方法

如果想讓一個對象變成一個可調(diào)用對象(加括號可以調(diào)用),需要在該對象的類中定義__call__方法,調(diào)用可調(diào)用對象的返回值就是__call__方法的返回值。

class Test():
    
    def __init__(self):
        self.name = 'python'
    
    def __call__(self, *args, **kwargs):  # self是Test類的對象
        print(self)  # __main__.Test object at 0x000001C78CE78FD0>
        print(self.name)
        
t = Test()
t()  # python

__str___方法

當(dāng)對象被訪問打印時觸發(fā)執(zhí)行,該方法必須有一個字符串類型的返回值。

class Test():
    def __init__(self, name):
        self.name = name
 
    def __str__(self):
        return self.name
   
t = Test('xu')
print(t1)  # xu

__del___方法

__del__方法是在對象被刪除時自動觸發(fā),由于python的垃圾回收機(jī)制會自動清理程序中沒用的資源,因此如果一個對象只是占用應(yīng)用程序的資源,沒有必要定義__del__方法,但是如果設(shè)計(jì)到占用系統(tǒng)資源的話比如打開的文件對象,由于關(guān)系到操作系統(tǒng)的資源,python的垃圾回收機(jī)制派不上用場的時候,就需要為對象創(chuàng)建__del__方法,用于對象被刪除后自動觸發(fā)回收操作系統(tǒng)資源。

class Test:
    def __init__(self):
        self.x = open('a.txt',mode='w')
        # self.x = 占用的是操作系統(tǒng)資源

    def __del__(self):
        print('run')
        # 發(fā)起系統(tǒng)調(diào)用,告訴操作系統(tǒng)回收相關(guān)的系統(tǒng)資源
        self.x.close()

obj = T()
del obj # obj.__del__() 

__enter__ __exit__方法

使用with上下文管理時,會觸發(fā)對象中的__enter__方法,并將__enter__方法的返回值賦值給as聲明的變量。
with語句正常結(jié)束的時候會觸發(fā)__exit__方法,該方法的三個參數(shù)分別代表異常類型、異常值和溯源信息,如果with語句代碼塊出現(xiàn)異常,則with語句后的代碼都不會被執(zhí)行,但是如果該方法返回值為True,異常會被清空,with代碼塊后的代碼還會被正常執(zhí)行。代碼如下:

class Open:
    def __init__(self):
        self.name = 'open'

    def __enter__(self):
        print('with語句執(zhí)行時會首先執(zhí)行的方法,返回值會賦值給as聲明的變量')
        return self.name

    def __exit__(self, exc_type, exc_val, exc_tb):
        print('with中的代碼塊執(zhí)行完畢時執(zhí)行exit')
        print(exc_type, '如果出現(xiàn)異常表示異常類型')
        print(exc_val, '表示異常的值')
        print(exc_tb, '表示異常的溯源信息')
        return 123  # 非零 非空 非None為真

    
with Open() as test:
    print(test)
    raise TypeError('看一下錯誤信息')
print('我會不會被執(zhí)行呢')  # 當(dāng)__exit__方法返回值為真時,會被執(zhí)行,否則不會被執(zhí)行

item系列方法

item系列方法包括__setitem__、__getitem__、delitem__方法,這三種方法分別會在中括號賦值/修改值、中括號取值、中括號刪除值時觸發(fā),比如可以自定義一個字典類,并自定義中括號賦值、取值、刪除值的方法:

class MyDict(dict):

    def __setitem__(self, key, value):
        print('執(zhí)行setitem', key, value)  # 執(zhí)行setitem, x, 1
        self.__dict__[key] = value

    def __getitem__(self, item):
        print('執(zhí)行g(shù)etitem', item)  # 執(zhí)行g(shù)etitem x
        print(self.__dict__[item])  # 1

    def __delitem__(self, key):
        print('執(zhí)行delitem', key)  # 執(zhí)行delitem x
        self.__dict__.pop(key)


d = MyDict()
d['x'] = 1
print(d['x'])
del d['x']

attr系列方法

attr系列方法包括__setattr__,__getattr__,__delattr__,__setattr__在添加/修改屬性時會觸發(fā),___delattr__刪除屬性的時候觸發(fā),__getattr__在使用.調(diào)用屬性并且屬性不存在時觸發(fā)。如下代碼所示

class Test:
    def __init__(self):
        self.name = 'python'

    def __setattr__(self, key, value):
        print('添加/修改屬性setattr')
        self.__dict__[key] = value
        # self.key = value  # 會出現(xiàn)無線遞歸,因?yàn)閷ο?屬性會調(diào)用__setattr__方法

    def __delattr__(self, item):
        print('刪除屬性delattr')
        self.__dict__.pop(item)

    def __getattr__(self, item):
        print('屬性不存在時調(diào)用getattr')
t = Test()
t.x = 'x'
print(t.y)
del t.x

單例模式

單例模式是一種軟件設(shè)計(jì)模式,為了保證一個類無論調(diào)用多少次產(chǎn)生的對象都指向同一個內(nèi)存地址,即僅僅只有一個對象。
實(shí)現(xiàn)單例模式的方式有很多,總的原則就是保證一個類只要實(shí)例化一個對象,因此關(guān)鍵點(diǎn)就是如何判斷這個類是否實(shí)例化過一個對象。

這里介紹幾種實(shí)現(xiàn)方式,供大家參考:

模塊導(dǎo)入的方式

這種方式的原理是模塊導(dǎo)入后只運(yùn)行一次,后面再次使用該模塊中的類是直接從內(nèi)存中查找。

# cls_singleton.py
class Foo(object):
    pass

instance = Foo()

# test.py
import cls_singleton

obj1 = cls_singleton.instance
obj2 = cls_singleton.instance
print(obj1 is obj2)  # True

通過__new__方法

原理就是判斷類是否有實(shí)力,有就直接返回,沒有就保存到_instance中

class Test:

    _instance = None

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __new__(cls, *args, **kwargs):
        # if cls._instance:
        #     return cls._instance                 # 有實(shí)例則直接返回
        # else:
        #     cls._instance = super().__new__(cls) # 沒有實(shí)例則new一個并保存
        #     return cls._instance                 # 這個返回是給是給init,再實(shí)例化一次,也沒有關(guān)系

        if not cls._instance:                         # 這是簡化的寫法,上面注釋的寫法更容易提現(xiàn)判斷思路
            cls._instance = super().__new__(cls)
        return cls._instance


t1 = Test('python', 18)
t2 = Test('python1', 18)
print(t1 is t2)  # True

自定義元類的方式

這種方式的原理是類調(diào)用的過程,類定義時會調(diào)用元類下的__init__,類調(diào)用(實(shí)例化對象)時會觸發(fā)元類下的__call__方法。

class Mymeta(type):

    def __init__(cls, name, bases, dic):
        super().__init__(name, bases, dic)
        cls._instance = None                    # 將記錄類的實(shí)例對象的數(shù)據(jù)屬性放在元類中自動定義了

    def __call__(cls, *args, **kwargs):                   # 此call會在類被調(diào)用(即實(shí)例化時觸發(fā))
        if cls._instance:      # 判斷類有沒有實(shí)例化對象
            return cls._instance
        else:        # 沒有實(shí)例化對象時,控制類造空對象并初始化
            obj = cls.__new__(cls, *args, **kwargs)
            obj.__init__(*args, **kwargs)
            cls._instance = obj             # 保存對象,下一次再實(shí)例化可以直接返回而不用再造對象
            return obj


class Test(metaclass=Mymeta):
    def __init__(self, name, age):
        self.name = name
        self.age = age


t1 = Test('python', 18)
t2 = Test('python1', 18)
print(t1 is t2)  # True

結(jié)語 

到此這篇關(guān)于python常用的魔法方法(雙下劃線)的文章就介紹到這了,更多相關(guān)python 魔法方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 淺談Python魔法方法
  • 詳解Python常用的魔法方法
  • 總結(jié)Python常用的魔法方法
  • Python魔法方法 容器部方法詳解
  • Python魔法方法功能與用法簡介
  • Python魔法方法詳解
  • python魔法方法-屬性訪問控制詳解
  • python魔法方法-屬性轉(zhuǎn)換和類的表示詳解
  • python魔法方法-自定義序列詳解

標(biāo)簽:銀川 呼倫貝爾 葫蘆島 湘西 烏魯木齊 安慶 呼倫貝爾 三亞

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python常用的魔法方法(雙下劃線)》,本文關(guān)鍵詞  python,常用的,常,用的,魔法,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python常用的魔法方法(雙下劃線)》相關(guān)的同類信息!
  • 本頁收集關(guān)于python常用的魔法方法(雙下劃線)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    8av国产精品爽爽ⅴa在线观看| 国产精品久久午夜夜伦鲁鲁| 一区二区三区精| 日韩国产中文字幕| 高清孕妇孕交╳╳交| 国产精品视频一二三四区| 亚洲欧洲精品在线观看| 超碰在线国产| 国产精品视频一二三四区| 国产美女明星三级做爰| www.五月激情| 992tv国产精品成人影院| 成人三级伦理片| 97avcom| 777午夜精品免费视频| 亚洲精选成人| 久久97超碰色| 26uuu欧美| 女教师淫辱の教室蜜臀av软件| 99免费在线视频| 91精品国产乱码久久| 奇米影视777在线欧美电影观看| 亚洲人成在线免费观看| 一区二区精品区| 1769国产精品视频| 免费av不卡在线观看| 91精品国产色综合久久ai换脸| 精品偷拍一区二区三区在线看| 91欧美精品成人综合在线观看| 久一视频在线观看| 久久久免费看片| 亚洲国产精品人人爽夜夜爽| 精品久久久久久久久久岛国gif| 欧美成人直播| 热久久视久久精品18亚洲精品| 青娱乐极品盛宴一区二区| 亚洲成av人影片在线观看| a级片在线免费| 99久久99精品| 神马久久av| 国产偷自视频区视频一区二区| 2018中文字幕在线观看| 狠狠综合久久av| 999在线免费观看视频| 中文字幕网站在线观看| 日韩一卡二卡三卡| 91精品国产91久久久久久最新| 色婷婷久久久| 国产欧美一区二区三区在线观看视频| 91成人噜噜噜在线播放| 欧美激情精品久久久| 国产一区二区高清在线| 99精品视频网站| 亚洲高潮无码久久| 最近最新mv在线观看免费高清| 欧美日本亚洲韩国国产| 国产性生交xxxxx免费| 亚洲欧美精品aaaaaa片| 污污网站在线看| 777丰满影院| 午夜宅男在线视频| 亚洲精品动漫| 欧美极品视频在线观看| 色婷婷av777| 一本—道久久a久久精品蜜桃| 黄色小视频在线免费观看| 国产aⅴ精品一区二区四区| 欧美成人国产| 18视频在线观看娇喘| 亚洲精品高清国产一线久久| 久久久久久免费| 国产资源在线播放| 97自拍视频| 欧美一区二区三区播放| 国产又爽又黄视频| 亚洲成人精品久久久| 国产激情91久久精品导航| 在线观看av网页| 性感美女一区二区三区| 翁止熄痒禁伦短文合集免费视频| 中文字幕在线乱| 精品美女www爽爽爽视频| 国产精品熟女久久久久久| a√中文在线观看| 久久精品magnetxturnbtih| 精品欧美日韩一区二区| 国产网友自拍视频导航网站在线观看| www.欧美国产| 九九九九精品九九九九| 日本24小时在线高清视频| 色欧美片视频在线观看| 日本三级一区二区三区| 国产xxxx视频| 欧美日韩国产综合视频在线观看中文| 亚洲毛片欧洲毛片国产一品色| 日本不卡免费高清视频在线| 亚洲av无码国产精品永久一区| 九九精品九九| 牛牛影视一区二区三区免费看| 日韩国产成人在线| 中文在线中文资源| 日本三级福利片| 国精产品乱码一区一区三区四区| swag国产精品一区二区| 日韩大片在线播放| 992kp免费看片| 日韩电影免费网址| 日韩精品视频在线观看一区二区三区| av鲁丝一区鲁丝二区鲁丝三区| 制服丝袜成人动漫| 亚洲女同志亚洲女同女播放| 国产91对白在线观看九色| 国产小视频你懂的| 国产精品视频精品视频| 男人天堂中文字幕| 欧美一区二区影视| 在线电影一区| 伊人精品在线视频| 国产精品久久久久久久无码| 奇米影视首页 狠狠色丁香婷婷久久综合| 欧美成人免费大片| 久久久久久久久福利| 国产精品一区二区三区四区在线观看| 国产在线69| 男女啊啊啊视频| 四虎永久免费| 日韩视频在线观看免费视频| 免费人成短视频在线观看网站| 日韩精品一页| 精品一区二区三区四区五区六区| 中文字幕亚洲欧美在线| 免费观看av网站| 天堂一区在线观看| 国产1区2区3区中文字幕| 色婷婷国产精品综合在线观看| 天天爱天天做天天操| 国产一级片久久| 日韩脚交footjobhdboots| 夜夜嗨av色综合久久久综合网| 精品一区欧美| 欧美精选视频在线观看| 全部免费毛片在线播放网站| 国产精品大片免费观看| 九色porny丨国产精品| 日韩av中文字幕第一页| 中文字幕亚洲二区| julia一区二区三区中文字幕| 一区二区三区91| 欧美性受xxx| 激情视频在线观看一区二区三区| 亚洲高清免费一级二级三级| 精品久久久三级| 亚洲丶国产丶欧美一区二区三区| 亚洲精品大片www| 草莓污污视频在线观看| 91系列在线播放| 欧美色图综合网| 亚洲成a人v欧美综合天堂下载| 亚洲二区在线| 欧美日韩国产精品成人| 亚欧在线观看视频| 国产精品自产拍| 中文字幕剧情在线观看一区| 亚洲一区二区福利视频| 欧美人与禽猛交乱配视频| 九一亚洲精品| 精品视频1区2区| 青青草国产在线| 国产极品人妖在线观看| 国产福利在线视频| 欧美亚州一区二区三区| 高清不卡一二三区| 成人信息集中地| 97精品久久久久中文字幕| 欧亚乱熟女一区二区在线| 色狠狠av一区二区三区| 亚洲欧洲在线观看av| 美脚恋feet久草欧美| 亚洲无码精品一区二区三区| 国产成人精品亚洲精品色欲| 精品99re| 国产精品xxx在线观看www| 3d黄动漫网站| 97中文字幕在线观看| 激情视频免费| aaaa黄色片| 国产成人免费av| 亚洲深夜福利在线| 中国美女乱淫免费看视频| 影视先锋午夜av| 伊人影院综合网| 国产一区二区影视| 国产又粗又猛又爽又黄的视频四季| 国产精品一区二区三区毛片淫片| 99久久精品免费看国产小宝寻花| 欧洲在线视频| 国产精品黄色av| √资源天堂中文在线| 九色91蝌蚪在线| 欧美一区二区三区的| 亚洲激情五月| 性欧美18+| 另类视频在线观看| 国产精品色眯眯| 日本欧美黄网站| 丁香社区五月天| 国产激情久久| 小说区乱图片区| 人妻无码久久一区二区三区免费| 亚洲精品午夜| 精品女同一区二区三区| 一级aaaa毛片| 在线观看区一区二| 在线观看不卡一区| 日韩av成人网| 国产精品一香蕉国产线看观看| 91成人免费在线观看| 欧洲一区二区三区免费视频| 午夜精品久久久久99热蜜桃导演| 精品国产午夜| 亚洲第一香蕉网| 亚洲午夜一区二区三区| 蜜臀91精品一区二区三区| 国产一区二区三区视频免费| 色多多国产成人永久免费网站| 日韩精品首页| 久久黄色av网站| 亚洲人成网站色在线观看| 亚洲卡一卡二| 五月婷婷深爱五月| 日韩欧美一二三区| 奇米影视狠888| 精品国产黄a∨片高清在线| 麻豆91在线观看| 久久精品嫩草影院| 久久精品国产亚洲av麻豆蜜芽| 亚洲电影av| 多人啪嗒啪嗒在线观看免费| 国产成人美女视频| 天天操天天操天天干| 日韩激情视频网站| 国产一级片播放| 7788色淫网站小说| 婷婷免费在线视频| 精品少妇无遮挡毛片| 亚洲精品资源在线| 日韩免费观看av| 亚洲一区视频在线播放| 亚洲精品国产无码| 色哺乳xxxxhd奶水米仓惠香| 麻豆视频久久| 国产小视频91| 午夜精品久久久| 色在线视频观看| 国产精品乱战久久久| 在线观看国产麻豆| 免费看国产片在线观看| 亚洲高清影院| 久久久久久美女精品| 国产三级香港三韩国三级| 色爱综合网站| 一级特黄特色的免费大片| 免费在线观看一区二区三区| 午夜欧美巨大性欧美巨大| 777国产偷窥盗摄精品视频| 久久女同性恋中文字幕| 欧美日韩国产探花| 美女脱光衣服与内衣内裤一区二区三区四区| 国外成人在线视频| 国产高清精品久久久久| 91丝袜脚交足在线播放| 91淫黄看大片| 久久精品国产2020观看福利| 国产精品麻豆欧美日韩ww| 涩涩视频在线免费看| 亚洲国产精品久久久男人的天堂| 中文字幕一区二区三区色视频| 任你弄在线视频免费观看| 国产精品尤物福利片在线观看| 91亚洲精品国产| 人妻换人妻a片爽麻豆| 91亚洲国产成人精品一区| 日韩人妻精品中文字幕| 丁香花五月婷婷| 亚洲v天堂v手机在线| 97精品在线观看| 成年人免费在线播放| 来吧亚洲综合网| 久久久久免费视频| 精品国产18久久久久久二百| 国产丝袜一区视频在线观看| 欧美丰满熟妇bbbbbb百度| 国产剧情麻豆剧果冻传媒视频免费| 亚洲欧洲精品一区二区| 欧美亚州韩日在线看免费版国语版| 国产精品久久免费视频| 色一情一区二区| 国产免费黄色| 天堂v视频永久在线播放| 先锋影音av资源站| 久久天天东北熟女毛茸茸| 久久久久一区二区三区四区| 国产91大片| 久国产精品视频| 欧美大尺度做爰床戏| 国产精久久久久久| 国模视频一区二区| 免费一级片在线观看| 欧美人体一区二区三区| 国产三级电影| 国产美女福利视频| 欧美另类极品videosbestfree| 亚洲av成人精品一区二区三区在线播放| 欧美第一页在线| 亚洲欧美手机在线| 亚洲一级理论片| 男女视频在线观看免费| 懂色av懂色av粉嫩av| 成人免费毛片视频| 中文字幕无码精品亚洲资源网久久| 欧美做受喷浆在线观看| 欧美日韩免费一区二区三区视频| 日本免费在线视频观看| 九一成人免费视频| www.视频在线.com| 波多野结衣精品在线| 久久99欧美| yellow91字幕网在线|