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

Python面向?qū)ο蟮膬?nèi)置方法梳理講解

 更新時間:2022年10月12日 10:53:44   作者:Python熱愛者  
面向?qū)ο缶幊淌且环N編程方式,此編程方式的落地需要使用“類”和 “對象”來實現(xiàn),所以,面向?qū)ο缶幊唐鋵嵕褪菍?nbsp;“類”和“對象” 的使用,今天給大家介紹下python 面向?qū)ο箝_發(fā)及基本特征,感興趣的朋友一起看看吧

首先class類里的內(nèi)置方法,比如:__call__,__str__這些都是在一定條件下自動運行的。

下面我們來介紹幾個內(nèi)置方法

1、__str__

先講講他的作用,在print打印對象的時候會自動觸發(fā)運行

例子1:

class Student:
    def __init__(self,name,age):
        self.name = name
        self.age = age
stu1 = Student('xiaoming',18)
print(stu1)      #運行原理就是,先在Student類里找__str__方法,沒有就去他的父類找
print(object.__str__(stu1))   #驗證了Student的父類里面有__str__方法

輸出結(jié)果是

#<__main__.Student object at 0x0000023A1170C128>
#<__main__.Student object at 0x0000023A1170C128>

例子2:

我們可以在Student類自己定義一個__str__方法來驗證,執(zhí)行print打印操作,原理#是執(zhí)行了__str__方法的

class Student:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __str__(self):
        print(self.name)
        return '<name:%s age:%s>' %(self.name,self.age)
stu1 = Student('xiaoming',18)
print(stu1)     #這個stu1就是__str__的返回值

輸入結(jié)果是:

xiaoming
<name:xiaoming age:18>

補充一下,對象的查找屬性的順序:對象自己的名稱空間,對象對應類的名稱空間,該類的基類的名稱空間

2、__del__方法

作用是,會在刪除對象之前自動觸發(fā)該方法

我就直接上代碼吧

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __del__(self):
        print('%s 已經(jīng)被刪除' % self.name)
stu1 = Student('xiaoming', 18)
stu2 = Student('zhangsan', 18)
print('主')

他的執(zhí)行結(jié)果是


xiaoming 已經(jīng)被刪除
zhangsan 已經(jīng)被刪除

講講為什么是這個輸出結(jié)果:這個python解釋器的垃圾回收機制吧,一個程序運行完畢,python會回收該程序在內(nèi)存中產(chǎn)生的數(shù)據(jù),當執(zhí)行到print(‘主’),后面沒有代碼執(zhí)行了,就會刪掉stu1,stu2這兩個對象,刪除這兩個對象之前呢,會執(zhí)行__del__方法,所以會出現(xiàn)上面的結(jié)果。

3、__call__

在調(diào)用該對象時,也就是實例化的時候,會自動運行其類和類的基類中的__call__方法,如果沒有的,那么該對象是不可調(diào)用的對象

class Student:   #補充:class Student: 相當于就是 Student = type(類名,該類的基類們,類體代碼產(chǎn)生的名稱空間)
    pass
Student()

分析一下:首先一切皆對象,Student就是一個對象,Student他是通過元類(type)實例化得來的,所以說調(diào)用Student(),就是去找type元類中找__call__方法去執(zhí)行,很明顯type類中有__call__方法,運行上面那段代碼,不會出錯。

下面舉個例子來驗證下上面的結(jié)論

class Student:  # (相當于上面例子的type)
    def __init__(self, name, age):
        self.name = name
        self.age = age
stu1 = Student('xiaoming', 18)  # stu1(相當于上面例子的Student)
try:  # 這里我們通過捕捉異常來打印出錯原因
    stu1()  # 這里相當于上面Student()
except Exception as e:
    print(e)
    # 打印結(jié)果是:'Student' object is not callable
    # “Student”對象不可調(diào)用,也就是stu1是不可調(diào)用的

結(jié)論:通過這兩個例子可以得到,只要該對象的類中有__call__方法,那該對象就可以調(diào)用,也就是實例化。

該對象實例化,就是運行其類中的__call__方法

驗證下:該對象實例化,就是運行其類中的__call__方法

class Teacher:
    def __init__(self, name):
        self.name = name
    def __call__(self, *args, **kwargs):
        print('我被%s調(diào)用了' % self.name)
tea1 = Teacher('xiaoming')
tea1()

#輸出結(jié)果是:我被xiaoming調(diào)用了

如何通過元類來控制類的調(diào)用

通過在自定義元類里的__call__方法,來實現(xiàn)對類的調(diào)用控制

1、首先類的調(diào)用原理就是運行元類里的__call__方法

2、通過__call__方法來實現(xiàn)對對象的初始化操作

class Mymeta(type):
    def __call__(self, *args, **kwargs):  # self就是Student *args和**kwargs就是Student后面的參數(shù)
        # print(self)
        # print(args)
        # print(kwargs)
        obj = self.__new__(self)  # 就是創(chuàng)建一個Student的空對象
        self.__init__(obj, *args, **kwargs)  # 執(zhí)行__init__方法    這里需要注意查找順序
        return obj  # 將實例化完的對象返回回去
class Student(object, metaclass=Mymeta):
    def __init__(self, name, age):
        self.name = name
        self.age = age
stu1 = Student('xiaoming', age=18)
print(type(stu1),stu1.__dict__)

這就是類的實例化的整個過程,不過這是我們通過自定義元類來控制類的調(diào)用,也就是再__call__多些代碼而已

在默認元類type里,肯定有__call__方法,該方法下面就是產(chǎn)生個空對象,再執(zhí)行__init__方法

先講到這三個方法,其他那些__dict__,class,__name__這些就不說了

到此這篇關(guān)于Python面向?qū)ο蟮膬?nèi)置方法梳理講解的文章就介紹到這了,更多相關(guān)Python面向?qū)ο髢?nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python中np.zeros_like函數(shù)用法詳解

    python中np.zeros_like函數(shù)用法詳解

    這篇文章主要介紹了python中np.zeros_like函數(shù)用法的相關(guān)資料,np.zeros_like是?NumPy?庫中的一個函數(shù),用于創(chuàng)建一個與給定數(shù)組形狀和類型相同的新數(shù)組,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-04-04
  • python中文件夾py文件相互引用方式

    python中文件夾py文件相互引用方式

    這篇文章主要介紹了python中文件夾py文件相互引用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • python學習入門細節(jié)知識點

    python學習入門細節(jié)知識點

    我們整理了關(guān)于python入門學習的一些細節(jié)知識點,對于學習python的初學者很有用,一起學習下。
    2018-03-03
  • python tkinter實現(xiàn)鼠標懸停提示

    python tkinter實現(xiàn)鼠標懸停提示

    這篇文章主要為大家詳細介紹了python如何使用tkinter控件實現(xiàn)鼠標懸停提示以及提示文本動態(tài)展示,文中的示例代碼講解詳細,有需要的可以參考下
    2024-11-11
  • pycharm永久激活方法

    pycharm永久激活方法

    這篇文章給大家介紹了pycharm永久激活碼,通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,對pycharm激活碼相關(guān)知識感興趣的朋友一起看看吧
    2020-01-01
  • 簡述python四種分詞工具,盤點哪個更好用?

    簡述python四種分詞工具,盤點哪個更好用?

    這篇文章主要介紹了python四種分詞工具的相關(guān)資料,幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下
    2021-04-04
  • python網(wǎng)絡(luò)爬蟲精解之Beautiful Soup的使用說明

    python網(wǎng)絡(luò)爬蟲精解之Beautiful Soup的使用說明

    簡單來說,Beautiful Soup 是 python 的一個庫,最主要的功能是從網(wǎng)頁抓取數(shù)據(jù),Beautiful Soup 提供一些簡單的、python 式的函數(shù)用來處理導航、搜索、修改分析樹等功能,需要的朋友可以參考下
    2021-09-09
  • python遞歸計算N!的方法

    python遞歸計算N!的方法

    這篇文章主要介紹了python遞歸計算N!的方法,涉及Python遞歸計算階乘的技巧,非常簡單實用,需要的朋友可以參考下
    2015-05-05
  • numpy中的ndarray方法和屬性詳解

    numpy中的ndarray方法和屬性詳解

    這篇文章主要介紹了numpy中的ndarray方法和屬性詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • python中xlwt模塊的具體用法

    python中xlwt模塊的具體用法

    本文主要介紹了python中xlwt模塊的具體用法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02

最新評論

沙坪坝区| 神池县| 健康| 威海市| 嫩江县| 东丽区| 曲沃县| 临潭县| 天长市| 黔西| 满城县| 霸州市| 新和县| 顺义区| 阳春市| 五寨县| 横山县| 庄河市| 贡山| 平江县| 满城县| 建阳市| 仪陇县| 拉孜县| 峨眉山市| 延津县| 东安县| 集贤县| 合江县| 遂溪县| 正安县| 富源县| 上高县| 体育| 自贡市| 淮南市| 灵丘县| 新巴尔虎右旗| 北安市| 西和县| 肃南|