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

一文帶你深入理解Python魔法方法

 更新時(shí)間:2023年06月26日 09:49:30   作者:小小張說(shuō)故事  
在Python中,魔法方法是指那些以雙下劃線開(kāi)頭和結(jié)尾的特殊方法,它們是Python的內(nèi)置方法,對(duì)應(yīng)于Python對(duì)象的各種運(yùn)算符,這篇文章將深入探討Python的一些魔法方法,并通過(guò)示例展示如何使用它們,需要的朋友可以參考下

一、構(gòu)造和初始化

__new__ 和 __init__ 是 Python 對(duì)象生命周期的開(kāi)始。__new__ 方法是在一個(gè)對(duì)象實(shí)例化的時(shí)候所調(diào)用的第一個(gè)方法,在調(diào)用 __init__ 初始化前,先調(diào)用 __new__

class MyClass:
    def __new__(cls, *args, **kwargs):
        print('Instance is created')
        instance = super().__new__(cls)
        return instance
    def __init__(self, name):
        print('Instance is initialized')
        self.name = name
obj = MyClass('MyClass')  # 輸出:Instance is created Instance is initialized

二、字符串表示

__str__ 和 __repr__ 都是用于顯示的魔法方法。__str__ 是友好易讀的方式呈現(xiàn),而 __repr__ 是準(zhǔn)確、無(wú)歧義地表達(dá)出來(lái),主要供開(kāi)發(fā)和調(diào)試時(shí)使用。

class MyClass:
    def __init__(self, name):
        self.name = name
    def __str__(self):
        return f'Instance of MyClass with name {self.name}'
    def __repr__(self):
        return f'MyClass(name={self.name})'
obj = MyClass('MyClass')
print(str(obj))  # 輸出:Instance of MyClass with name MyClass
print(repr(obj))  # 輸出:MyClass(name=MyClass)

三、算術(shù)運(yùn)算符

魔法方法還可以用來(lái)定義對(duì)象的算術(shù)運(yùn)算行為,例如 __add__、__sub____mul__ 等。

class Number:
    def __init__(self, value):
        self.value = value
    def __add__(self, other):
        return self.value + other.value
num1 = Number(1)
num2 = Number(2)
print(num1 + num2)  # 輸出:3

四、比較運(yùn)算符

比較運(yùn)算符的魔法方法包括 __lt__、__le__、__eq__、__ne____gt__、__ge__ 等。

class Number:
    def __init__(self, value):
        self.value = value
    def __lt__(self, other):
        return self.value < other.value
num1 = Number(1)
num2 = Number(2)
print(num1 < num2)  # 輸出:True

五、屬性訪問(wèn)

當(dāng)我們?cè)噲D訪問(wèn)一個(gè)對(duì)象的屬性時(shí),__getattr__、__setattr____delattr____getattribute__ 魔法方法就會(huì)被調(diào)用。__getattribute__ 方法是用于獲取一個(gè)屬性的值,而 __setattr__ 是在我們?cè)噲D設(shè)置一個(gè)屬性值時(shí)被調(diào)用。

class MyClass:
    def __init__(self):
        self.name = 'MyClass'
    def __getattribute__(self, item):
        if item == 'name':
            print('Accessing name attribute')
        return object.__getattribute__(self, item)
    def __setattr__(self, key, value):
        print(f'Setting attribute {key} with value {value}')
        self.__dict__[key] = value
obj = MyClass()
print(obj.name)  # 輸出:Accessing name attribute MyClass
obj.name = 'New name'  # 輸出:Setting attribute name with value New name

六、上下文管理器

上下文管理器是通過(guò) __enter__ 和 __exit__ 魔法方法實(shí)現(xiàn)的,它們通常在 with 語(yǔ)句中使用。

class ManagedFile:
    def __init__(self, filename):
        self.filename = filename
    def __enter__(self):
        self.file = open(self.filename, 'r')
        return self.file
    def __exit__(self, exc_type, exc_val, exc_tb):
        if self.file:
            self.file.close()
with ManagedFile('hello.txt') as f:
    content = f.read()
print(content)

在這個(gè)例子中,__enter__ 方法打開(kāi)文件并返回,__exit__ 方法在離開(kāi) with 塊時(shí)被調(diào)用,負(fù)責(zé)關(guān)閉文件。

七、結(jié)論

Python 的魔法方法為我們提供了改變對(duì)象行為的強(qiáng)大工具,讓我們能夠以符合 Python 風(fēng)格的方式去操作和處理對(duì)象。同時(shí),理解并掌握這些魔法方法也是成為高級(jí) Python 程序員的必經(jīng)之路。

到此這篇關(guān)于一文帶你深入理解Python魔法方法的文章就介紹到這了,更多相關(guān)Python魔法方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python操作mysql實(shí)現(xiàn)一個(gè)超市管理系統(tǒng)

    python操作mysql實(shí)現(xiàn)一個(gè)超市管理系統(tǒng)

    超市管理系統(tǒng)有管理員和普通用戶兩條分支,只需掌握Python基礎(chǔ)語(yǔ)法,就可以完成這個(gè)項(xiàng)目,下面這篇文章主要給大家介紹了關(guān)于python操作mysql實(shí)現(xiàn)一個(gè)超市管理系統(tǒng)的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • 基于python 將列表作為參數(shù)傳入函數(shù)時(shí)的測(cè)試與理解

    基于python 將列表作為參數(shù)傳入函數(shù)時(shí)的測(cè)試與理解

    這篇文章主要介紹了基于python 將列表作為參數(shù)傳入函數(shù)時(shí)的測(cè)試與理解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • flask的orm框架SQLAlchemy查詢實(shí)現(xiàn)解析

    flask的orm框架SQLAlchemy查詢實(shí)現(xiàn)解析

    這篇文章主要介紹了flask的orm框架SQLAlchemy查詢實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • 如何給Python代碼進(jìn)行加密

    如何給Python代碼進(jìn)行加密

    這篇文章主要介紹了如何給Python代碼進(jìn)行加密,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 解決使用pycharm提交代碼時(shí)沖突之后文件丟失找回的方法

    解決使用pycharm提交代碼時(shí)沖突之后文件丟失找回的方法

    這篇文章主要介紹了解決使用pycharm提交代碼時(shí)沖突之后文件丟失找回的方法 ,需要的朋友可以參考下
    2018-08-08
  • python游戲庫(kù)pygame經(jīng)典教程(推薦!)

    python游戲庫(kù)pygame經(jīng)典教程(推薦!)

    Python Pygame是一款專(zhuān)門(mén)為開(kāi)發(fā)和設(shè)計(jì) 2D 電子游戲而生的軟件包,是入門(mén)級(jí)游戲開(kāi)發(fā)庫(kù),下面這篇文章主要給大家介紹了python游戲庫(kù)pygame經(jīng)典教程的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • 在linux系統(tǒng)中安裝python3.8.1?并卸載?python3.6.2?更新python3引導(dǎo)到3.8.1的詳細(xì)步驟

    在linux系統(tǒng)中安裝python3.8.1?并卸載?python3.6.2?更新python3引導(dǎo)到3.8.1的

    這篇文章主要介紹了如何在linux系統(tǒng)中安裝python3.8.1?并卸載?python3.6.2?更新python3引導(dǎo)到3.8.1,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-11-11
  • Python Web Flask擴(kuò)展開(kāi)發(fā)指南分享

    Python Web Flask擴(kuò)展開(kāi)發(fā)指南分享

    這篇文章主要介紹了Python Web Flask擴(kuò)展開(kāi)發(fā)指南,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • Django返回json數(shù)據(jù)用法示例

    Django返回json數(shù)據(jù)用法示例

    這篇文章主要介紹了Django返回json數(shù)據(jù)用法,結(jié)合實(shí)例形式分析了jQuery通過(guò)前端ajax發(fā)送get請(qǐng)求及后臺(tái)使用Django接收GET請(qǐng)求并返回處理的json數(shù)據(jù)相關(guān)技巧,需要的朋友可以參考下
    2016-09-09
  • python郵件發(fā)送smtplib使用詳解

    python郵件發(fā)送smtplib使用詳解

    這篇文章主要為大家詳細(xì)介紹了python郵件發(fā)送smtplib的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05

最新評(píng)論

沁源县| 洪湖市| 共和县| 兴业县| 莱芜市| 德令哈市| 股票| 上思县| 安庆市| 汽车| 泰和县| 静海县| 都江堰市| 依兰县| 崇明县| 中方县| 河源市| 黎平县| 正宁县| 当雄县| 乌兰察布市| 赫章县| 革吉县| 桐庐县| 本溪市| 富川| 奉节县| 渭南市| 达州市| 正阳县| 平原县| 平山县| 信阳市| 长丰县| 甘肃省| 东源县| 曲沃县| 咸宁市| 江川县| 青龙| 韶关市|