国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python高級知識之常用的魔術(shù)方法

這篇具有很好參考價值的文章主要介紹了python高級知識之常用的魔術(shù)方法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前言:魔法方法(Magic Method)是python內(nèi)置方法,格式為:“__方法名__”,不需要主動調(diào)用,存在的目的是為了給python的解釋器進行調(diào)用,幾乎每個魔法方法都有一個對應(yīng)的內(nèi)置函數(shù),或者運算符,當(dāng)我們對這個對象使用這些函數(shù)或者運算符時就會調(diào)用類中的對應(yīng)魔法方法,可以理解為重寫這些python的內(nèi)置函數(shù)

1、init()魔術(shù)方法

對象初始化時執(zhí)行__init__

class Test:

    def __init__(self, name, age):
        self.name = name
        self.age = age
        print("名字:" + self.name)
        print("年齡:" + self.age)


if __name__ == '__main__':
    a = Test("小李", "18")
-------輸出結(jié)果---------
名字:小李
年齡:18

上面示例會發(fā)現(xiàn):__init__方法會在類實例化的時候自動調(diào)用,無需手動執(zhí)行;

2、new()魔術(shù)方法

對象初始化時執(zhí)行__new__,目的是為該對象分配內(nèi)存空間。
對象初始化時一般先執(zhí)行__new__,再執(zhí)行__init__,看下面示例:

class Test:
    def __new__(cls, *args, **kwargs):
        print("我是__new__方法")
        obj = object.__new__(cls)
        print(obj)
        return obj

    def __init__(self):
        print(self)
        print("我是__init__方法")


if __name__ == '__main__':
    a = Test()
    
-------輸出結(jié)果---------
我是__new__方法
<__main__.Test object at 0x123902f70>
<__main__.Test object at 0x123902f70>
我是__init__方法

上面示例會發(fā)現(xiàn):
1)__new__魔術(shù)方法返回的就是self的內(nèi)存地址;
2)如果不在__new__方法里面調(diào)object的__new__方法就不會創(chuàng)建對象,__init__不會被執(zhí)行;
3)如果不在__new__方法里面return創(chuàng)建好的對象,__init__不會被執(zhí)行;

3、str()魔術(shù)方法

打印一個對象的時候,默認調(diào)用

class Test:

    def __init__(self):
        pass

    def __str__(self):
        return "test_name"


if __name__ == '__main__':
    a = Test()
    print(a)
-------輸出結(jié)果---------
test_name

上面示例會發(fā)現(xiàn):
1)操作類實例的時候自動化調(diào)用__str__,即print對象時,對象輸出的樣子;
2)還有一個魔術(shù)方法__repr__,與__str__類似,當(dāng)同時出現(xiàn)時,str__優(yōu)先級高于__repr;

4、del()魔術(shù)方法

對象被刪除的時候調(diào)用該方法

class Test:

    def __init__(self):
        print("初始化對象")

    def __del__(self):
        print("對象被刪除了")


if __name__ == '__main__':
    a = Test()
    print("end")
-------輸出結(jié)果---------
初始化對象
對象被刪除了

上面示例會發(fā)現(xiàn):
1)對象在內(nèi)存中被釋放時,自動觸發(fā)執(zhí)行;
2)此方法一般無須定義,因為Python是一門高級語言,程序員在使用時無需關(guān)心內(nèi)存的分配和釋放,因為此工作都是交給Python解釋器來執(zhí)行,所以__del__()的調(diào)用是由解釋器在進行垃圾回收時自動觸發(fā)執(zhí)行的

5、call()魔術(shù)方法

對象當(dāng)作函數(shù)執(zhí)行時會被默認自動調(diào)用

class Test:

    def __call__(self, *args, **kwargs):
        print("調(diào)用了__call__")


if __name__ == '__main__':
    a = Test()
    a()
-------輸出結(jié)果---------
調(diào)用了__call__

上面示例會發(fā)現(xiàn):把類實例當(dāng)成函數(shù)執(zhí)行的時候會觸發(fā)__call__方法,對于 call 方法的執(zhí)行是由對象后加括號觸發(fā)的,即:對象() 或者 類()()

6、len()魔術(shù)方法

調(diào)用len()函數(shù)的時候自動調(diào)用

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

    def __len__(self):
    	# 實例有自己的__dict__屬性,__dict__是一個字典,鍵是屬性名,值為屬性值
        return len(self.__dict__)

if __name__ == '__main__':
    t = Test("狗子", 22)
    print(len(t))
-------輸出結(jié)果---------
2

上面示例會發(fā)現(xiàn):調(diào)用len()函數(shù)的時候自動調(diào)用,用來計算對象的長度

7、eq()魔術(shù)方法

調(diào)用相等判斷的時候自動調(diào)用

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

    def __eq__(self, other):
        print(self.age)
        print(other.age)
        return self.age == other.age


if __name__ == '__main__':
    t1 = Test("狗子", 22)
    t2 = Test("小李", 23)
    print(t1 == t2)
-------輸出結(jié)果---------
22
23
False

8、hash()魔術(shù)方法

調(diào)用hash()方法時自動調(diào)用\

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

    def __hash__(self):
        return hash(self.name)


if __name__ == '__main__':
    t = Test("狗子", 22)
    print(hash(t))
-------輸出結(jié)果---------
902838481588431200

注意:只有不可變數(shù)據(jù)類型才有哈希值

9、getitem()魔術(shù)方法

獲取實例屬性的時候自動調(diào)用

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

    def __getitem__(self, item):
        return self.__dict__[item]


if __name__ == '__main__':
    t = Test("狗子", 22)
    print(t['name'])
-------輸出結(jié)果---------
狗子

10、setitem()魔術(shù)方法

用于設(shè)置對象屬性

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

    def __setitem__(self, key, value):
        self.__dict__[key] = value


if __name__ == '__main__':
    t = Test("狗子")
    print(t.__dict__)
    t['age'] = 22
    print(t.__dict__)
-------輸出結(jié)果---------
{'name': '狗子'}
{'name': '狗子', 'age': 22}

11、delitem()魔術(shù)方法

刪除對象屬性時調(diào)用

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

    def __setitem__(self, key, value):
        self.__dict__[key] = value

    def __delitem__(self, key):
        self.__dict__.pop(key)


if __name__ == '__main__':
    t = Test("狗子")
    print(t.__dict__)
    t['age'] = 22
    print(t.__dict__)
    del t['name']
    print(t.__dict__)
-------輸出結(jié)果---------
{'name': '狗子'}
{'name': '狗子', 'age': 22}
{'age': 22}

12、delattr()魔術(shù)方法

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

    def __setitem__(self, key, value):
        self.__dict__[key] = value

    def __delattr__(self, item):
        self.__dict__.pop(item)


if __name__ == '__main__':
    t = Test("狗子")
    print(t.__dict__)
    t['age'] = 22
    print(t.__dict__)
    del t.name
    print(t.__dict__)
-------輸出結(jié)果---------
{'name': '狗子'}
{'name': '狗子', 'age': 22}
{'age': 22}

注意:__delitem__和__delattr__都是刪除對象的屬性,但是其用法不一樣,注意看上面2個示例。

13、add()/sub()魔術(shù)方法

運算符執(zhí)行計算時調(diào)用文章來源地址http://www.zghlxwxcb.cn/news/detail-502101.html

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

    def __add__(self, other):
        return self.age + other.age

    def __sub__(self, other):
        return self.age - other.age


if __name__ == '__main__':
    t1 = Test(22)
    t2 = Test(23)
    print(t1 + t2)
    print(t1 - t2)

到了這里,關(guān)于python高級知識之常用的魔術(shù)方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Python魔術(shù)方法

    Python實用教程_spiritx的博客-CSDN博客 所有以雙下劃線 __ 包起來的方法,統(tǒng)稱為 Magic Method(魔術(shù)方法) ,它是一種的特殊方法,普通方法需要調(diào)用,而魔術(shù)方法不需要 顯示 調(diào)用就可以執(zhí)行。 魔術(shù)方法在類或?qū)ο蟮哪承┦录霭l(fā)后會自動執(zhí)行,讓類具有神奇的“魔力”。如果

    2024年02月10日
    瀏覽(39)
  • 深入理解 python 虛擬機:魔術(shù)方法之?dāng)?shù)學(xué)計算

    在本篇文章當(dāng)中主要給大家介紹在 python 當(dāng)中一些常見的魔術(shù)方法,本篇文章主要是關(guān)于與數(shù)學(xué)計算相關(guān)的一些魔術(shù)方法,在很多科學(xué)計算的包當(dāng)中都使用到了這些魔術(shù)方法。 當(dāng)我們在Python中定義自己的類時,可以通過重寫一些特殊方法來改變對象的比較行為。這些特殊方法

    2024年02月05日
    瀏覽(18)
  • Elasticsearch的基礎(chǔ)知識和架構(gòu)設(shè)計,以及一些常用的功能——面向?qū)ο缶幊毯蛿?shù)據(jù)結(jié)構(gòu)的高級應(yīng)用場景,以及相應(yīng)的代碼實現(xiàn)方法和工具

    作者:禪與計算機程序設(shè)計藝術(shù) 2019年,Elasticsearch正式發(fā)布了7.0版本。在這個版本更新中,新增了許多新特性和功能,包括全文搜索、分類聚合、分析器、圖形化數(shù)據(jù)可視化等。無論對于企業(yè)或個人來說,都意味著更好的應(yīng)用場景。但是,掌握Elasticsearch并非易事,需要不斷學(xué)

    2024年02月07日
    瀏覽(17)
  • 深入理解 python 虛擬機:花里胡哨的魔術(shù)方法

    在本篇文章當(dāng)中主要給大家介紹在 cpython 當(dāng)中一些比較花里胡哨的魔術(shù)方法,以幫助我們自己實現(xiàn)比較花哨的功能,當(dāng)然這其中也包含一些也非常實用的魔術(shù)方法。 在 Python 中, __hash__() 方法是一種特殊方法(也稱為魔術(shù)方法或雙下劃線方法),用于返回對象的哈希值。哈希

    2024年02月06日
    瀏覽(20)
  • Python-面向?qū)ο螅好嫦驅(qū)ο?、成員方法 、類和對象、構(gòu)造方法、魔術(shù)方法、封裝、繼承、類型注解、多態(tài)(抽象類(接口))

    Python-面向?qū)ο螅好嫦驅(qū)ο蟆⒊蓡T方法 、類和對象、構(gòu)造方法、魔術(shù)方法、封裝、繼承、類型注解、多態(tài)(抽象類(接口))

    當(dāng)前版本號[20230806]。 版本 修改說明 20230806 初版 生活中數(shù)據(jù)的組織 學(xué)校開學(xué),要求學(xué)生填寫自己的基礎(chǔ)信息,一人發(fā)一張白紙,讓學(xué)生自己填, 易出現(xiàn)內(nèi)容混亂 但當(dāng)改為登記表,打印出來讓學(xué)生自行填寫, 就會整潔明了 程序中數(shù)據(jù)的組織 在程序中簡單使用變量來記錄學(xué)

    2024年02月14日
    瀏覽(22)
  • 畢業(yè)設(shè)計:Vue3+FastApi+Python+Neo4j實現(xiàn)主題知識圖譜網(wǎng)頁應(yīng)用——前言

    畢業(yè)設(shè)計:Vue3+FastApi+Python+Neo4j實現(xiàn)主題知識圖譜網(wǎng)頁應(yīng)用——前言

    資源鏈接:https://download.csdn.net/download/m0_46573428/87796553 前言:畢業(yè)設(shè)計:Vue3+FastApi+Python+Neo4j實現(xiàn)主題知識圖譜網(wǎng)頁應(yīng)用——前言_人工智能技術(shù)小白修煉手冊的博客-CSDN博客 首頁與導(dǎo)航:畢業(yè)設(shè)計:Vue3+FastApi+Python+Neo4j實現(xiàn)主題知識圖譜網(wǎng)頁應(yīng)用——前端:首頁與導(dǎo)航欄_人工智

    2024年02月14日
    瀏覽(28)
  • python實現(xiàn)的一些方法,可以直接拿來用的那種

    很多時候我們需要批量生成日期,方法有很多,這里分享兩段代碼 獲取過去 N 天的日期: 輸出: 生成一段時間區(qū)間內(nèi)的日期: 輸出: 保存數(shù)據(jù)到 CSV 是太常見的操作了 Pyecharts 作為 Echarts 的優(yōu)秀 Python 實現(xiàn),受到眾多開發(fā)者的青睞,用 Pyecharts 作圖時,使用一個舒服的背景也

    2024年02月10日
    瀏覽(22)
  • 記錄-VUE中常用的4種高級方法

    記錄-VUE中常用的4種高級方法

    provide/inject 是 Vue.js 中用于跨組件傳遞數(shù)據(jù)的一種高級技術(shù),它可以將數(shù)據(jù)注入到一個組件中,然后讓它的所有子孫組件都可以訪問到這個數(shù)據(jù)。通常情況下,我們在父組件中使用 provide 來提供數(shù)據(jù),然后在子孫組件中使用 inject 來注入這個數(shù)據(jù)。 使用 provide/inject 的好處是可

    2024年02月03日
    瀏覽(13)
  • 高級編程,JavaScript筆記-字符串的常用方法

    我們也可將字符串常用的操作方法歸納為增、刪、改、查,需要知道字符串的特點是一旦創(chuàng)建了,就不可變 增 這里增的意思并不是說直接增添內(nèi)容,而是創(chuàng)建字符串的一個副本,再進行操作 除了常用 + 以及 ${} 進行字符串拼接之外,還可通過 concat concat 用于將一個或多個字

    2024年01月23日
    瀏覽(19)
  • 組合,反射,魔術(shù)方法

    組合 反射 魔術(shù)方法

    2024年02月08日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包