日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Python魔術方法深入分析講解_python

作者:HaiFan. ? 更新時間: 2023-04-17 編程語言

前言

魔術方法就是一個類/對象中的方法,和普通方法唯一的不同是:普通方法需要調用,而魔術方法是在特定時刻自動觸發

__init__

初始化魔術方法

初始化魔術方法
如何觸發:初始化對象時觸發
參數:至少一個self
返回值:無
作用:初始化對象的成員
注:使用這個方式初始化的成員都是寫入對象中的,類中不存在

class Person:
    def __init__(self,name):
        self.name = name
a = Person('lisan')
print(a.name)

__new__

實例化魔術方法

如何觸發:在實例化對象時觸發

參數:至少一個cls,接收當前類

返回值:必須返回一個對象實例

作用:實例化對象

注意:實例化對象是Object類底層實現,其他類繼承了Object的 __new__才能夠實現實例化對象。沒事別碰這個魔術方法,先觸發__new__,才會觸發__init__

class Person:
    def __init__(self,name):
        print('------------init')
        self.name = name
    def __new__(cls,*args,**kwargs):
        print('----------new')
        return super(Person,cls).__new__(cls,*args,**kwargs)
a = Person('lisan')

__call__

調用對象的魔術方法

如何觸發:將對象當作函數調用時觸發對象()

參數:至少一個self接收對象

返回值:根據情況而定

作用:可以將復雜的步驟進行合并操作,減少調用的步驟,方便使用

注意:無

class Person:
    def __init__(self):
        print('------------init')
    def __new__(cls ,*args ,**kwargs):
        print('----------new')
        ip = object.__new__(cls ,*args ,**kwargs)
        print(ip)
        return ip
    def __call__(self ,name):
        print('-----------call')
        print(f'執行對象得到的參數{name}')
a = Person()
a('nbnb')

__del__

析構魔術方法

如何觸發:當對象沒有用(沒有任何變量引用)的時候觸發

參數:一個self

返回值:無

作用:使用完對象是回收資源

注意:del不一定會觸發當前方法,只有當前對象沒有任何變量接收時才會觸發

class Person:
    def __init__(self,name):
        self.name = name
    def __del__(self):
        pass
a = Person('lisi')
b = a
print(b.name)
b.name = 'wangwu'
print(a.name)

通過del可以刪除某對象對地址的引用。

通過import sys``sys.getrefcount(a)可以查看對地址的引用次數。

當代碼全部執行結束的時候,會自動執行del方法。

__str__

觸發時機:當你打印對象名的時候自動觸發,調用 __str__里面的內容

注意:一定要加返回值,return后面的內容就是打印對象看到的內容。

class Person:
    def __init__(self,name):
        self.name = name
    # def __str__(self):
    #     return self.name
a = Person('lisan')
print(a)

當我們直接打印對象的時候,打印出來的是一個地址,這個地址我們是看不懂的,編譯器才看得懂。

想打印對象名,要顯示出準確的東西,就需要 __str__

class Person:
    def __init__(self,name):
        self.name = name
    def __str__(self):
        return self.name
a = Person('lisan')
print(a)

總結

__init__和__str__這兩個是重點。

__new__的作用:開辟空間

__del__的作用:沒有指針引用的時候會調用,一般是不需要重寫的

__call__的作用:想不想讓對象當函數用。

原文鏈接:https://blog.csdn.net/weixin_73888239/article/details/128883566

欄目分類
最近更新