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

一篇文章徹底搞懂Python類(lèi)屬性和方法的調(diào)用

 更新時(shí)間:2022年06月26日 09:42:12   作者:若年封塵  
對(duì)python?調(diào)用類(lèi)屬性的方法詳解測(cè)試時(shí)候類(lèi)的調(diào)用是經(jīng)常會(huì)用到的,下面這篇文章主要給大家介紹了關(guān)于Python類(lèi)屬性和方法的調(diào)用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

Python從設(shè)計(jì)之初就已經(jīng)是一門(mén)面向?qū)ο蟮恼Z(yǔ)言,正因?yàn)槿绱?,在Python中創(chuàng)建一個(gè)類(lèi)和對(duì)象是很容易的。

一、類(lèi)、對(duì)象概述

在面向?qū)ο蟪绦蛟O(shè)計(jì)中,把數(shù)據(jù)以及對(duì)數(shù)據(jù)的操作封裝在一起,組成一個(gè)整體(對(duì)象),不同對(duì)象之間通過(guò)消息機(jī)制來(lái)通信或者同步。對(duì)于相同類(lèi)型的對(duì)象進(jìn)行分類(lèi)、抽象后,得出共同的特征而形成了類(lèi)。

類(lèi)的抽象具體包括兩個(gè)方面:

1.數(shù)據(jù)抽象:描述某類(lèi)對(duì)象共有的屬性或狀態(tài)。

2.過(guò)程抽象:描述某類(lèi)對(duì)象共有的行為或功能操作。

在python中,使用類(lèi)來(lái)定義同一種類(lèi)型的對(duì)象。類(lèi)是廣義的數(shù)據(jù)類(lèi)型,能夠定義復(fù)雜數(shù)據(jù)的特性,包括:

1.靜態(tài)特性(即數(shù)據(jù)抽象):創(chuàng)建類(lèi)時(shí)用變量形式表示對(duì)象特征的成員稱(chēng)為屬性(數(shù)據(jù)成員)。

2.動(dòng)態(tài)特性(即行為抽象,也就是對(duì)數(shù)據(jù)的操作方法):用函數(shù)形式表示對(duì)象行為的成員稱(chēng)為成員方法,數(shù)據(jù)成員和成員方法統(tǒng)稱(chēng)為類(lèi)的成員。

類(lèi)是實(shí)現(xiàn)代碼復(fù)用和設(shè)計(jì)復(fù)用的一個(gè)重要方法,封裝、繼承、多態(tài)是面向?qū)ο蟪绦蛟O(shè)計(jì)的三個(gè)要素。

類(lèi)是生成對(duì)象的抽象模板,對(duì)象是根據(jù)類(lèi)創(chuàng)建出來(lái)的一個(gè)個(gè)具體的實(shí)例。

二、類(lèi)的定義與使用

Python使用class關(guān)鍵字來(lái)定義類(lèi),class關(guān)鍵字之后是一個(gè)空格,接下來(lái)是類(lèi)的名字,如果派生自其它基類(lèi)的話(huà)則需要把所有父類(lèi)放到一對(duì)圓括號(hào)中并使用逗號(hào)分隔,然后是一個(gè)冒號(hào),最后換行并定義類(lèi)的內(nèi)部實(shí)現(xiàn)。

類(lèi)名的首字母一般要大寫(xiě)。

class Car(object):              #定義一個(gè)類(lèi),派生自object類(lèi)(所有類(lèi)的祖先,定義類(lèi)時(shí)不存在其他父類(lèi)就寫(xiě)object)
	can_move=True               #定義類(lèi)屬性
    def infor(self):            #定義成員方法
        print("This is a car")

類(lèi)的方法與普通的函數(shù)只有一個(gè)特別的區(qū)別——它們必須有一個(gè)額外的第一個(gè)參數(shù)名稱(chēng), 按照慣例它的名稱(chēng)是 self(self代表類(lèi)的實(shí)例,而非類(lèi);self 不是 python 關(guān)鍵字,我們把他換成其他也是可以正常執(zhí)行的)。

三、類(lèi)屬性和類(lèi)方法的調(diào)用

定義了類(lèi)之后,就可以用來(lái)實(shí)例化對(duì)象,并通過(guò)“對(duì)象名.成員”的方式來(lái)訪問(wèn)其中的數(shù)據(jù)成員或成員方法。

>>>spring=Bird()                        #實(shí)例化對(duì)象
>>>print(Bird.have_feather)             #通過(guò)類(lèi)名調(diào)用屬性
>>>print(Bird.have_head)                #通過(guò)對(duì)象名調(diào)用屬性
>>>spring.move()                        #通過(guò)對(duì)象名調(diào)用方法
>

類(lèi)方法大體分為 3 類(lèi),分別是類(lèi)方法、實(shí)例方法和靜態(tài)方法,其中實(shí)例方法用的是最多的。我們知道,實(shí)例方法的調(diào)用方式其實(shí)有 2種,既可以采用類(lèi)對(duì)象調(diào)用,也可以直接通過(guò)類(lèi)名調(diào)用。

通常情況下,我們習(xí)慣使用類(lèi)對(duì)象調(diào)用類(lèi)中的實(shí)例方法。但如果想用類(lèi)調(diào)用實(shí)例方法,不能像如下這樣:

class Study:
    def info(self):
        print("學(xué) Python")
#通過(guò)類(lèi)名直接調(diào)用實(shí)例方法
Study.info()

運(yùn)行上面代碼,程序會(huì)報(bào)出如下錯(cuò)誤:

Traceback (most recent call last):
  File "D:\python3.6\demo.py", line 5, in <module>
    Study.info()
TypeError: info() missing 1 required positional argument: 'self'

其中,最后一行報(bào)錯(cuò)信息提示我們,調(diào)用 info() 類(lèi)方式時(shí)缺少給 self 參數(shù)傳參。這意味著,和使用類(lèi)對(duì)象調(diào)用實(shí)例方法不同,通過(guò)類(lèi)名直接調(diào)用實(shí)例方法時(shí),Python 并不會(huì)自動(dòng)給 self 參數(shù)傳值。

讀者想想也應(yīng)該明白,self 參數(shù)需要的是方法的實(shí)際調(diào)用者(是類(lèi)對(duì)象),而這里只提供了類(lèi)名,當(dāng)然無(wú)法自動(dòng)傳值。

因此,如果想通過(guò)類(lèi)名直接調(diào)用實(shí)例方法,就必須手動(dòng)為 self 參數(shù)傳值。例如修改上面的代碼為:

class Study:
    def info(self):
        print("學(xué) Python")
clang = Study()
#通過(guò)類(lèi)名直接調(diào)用實(shí)例方法
Study.info(clang)

再次運(yùn)行程序,結(jié)果為:

學(xué) Python

可以看到,通過(guò)手動(dòng)將 clang 這個(gè)類(lèi)對(duì)象傳給了 self 參數(shù),使得程序得以正確執(zhí)行。實(shí)際上,這里調(diào)用實(shí)例方法的形式完全是等價(jià)于 clang.info()。

值得一提的是,上面的報(bào)錯(cuò)信息只是讓我們手動(dòng)為 self 參數(shù)傳值,但并沒(méi)有規(guī)定必須傳一個(gè)該類(lèi)的對(duì)象,其實(shí)完全可以任意傳入一個(gè)參數(shù),例如:

class Study:
    def info(self):
        print(self,"學(xué) Python")
#通過(guò)類(lèi)名直接調(diào)用實(shí)例方法
Study.info("zhangsan")

運(yùn)行結(jié)果為:

zhangsan 學(xué) Python

可以看到,“zhangsan” 這個(gè)字符串傳給了 info() 方法的 self 參數(shù)。顯然,無(wú)論是 info() 方法中使用 self 參數(shù)調(diào)用其它類(lèi)方法,還是使用 self 參數(shù)定義新的實(shí)例變量,胡亂的給 self 參數(shù)傳參都將會(huì)導(dǎo)致程序運(yùn)行崩潰。

總的來(lái)說(shuō),Python 中允許使用類(lèi)名直接調(diào)用實(shí)例方法,但必須手動(dòng)為該方法的第一個(gè) self 參數(shù)傳遞參數(shù),這種調(diào)用方法的方式被稱(chēng)為“非綁定方法”。

用類(lèi)的實(shí)例對(duì)象訪問(wèn)類(lèi)成員的方式稱(chēng)為綁定方法,而用類(lèi)名調(diào)用類(lèi)成員的方式稱(chēng)為非綁定方法。

四、私有成員與公有成員

  • 私有成員在類(lèi)的外部不能直接訪問(wèn),一般是在類(lèi)的內(nèi)部進(jìn)行訪問(wèn)和操作,或者在類(lèi)的外部通過(guò)調(diào)用對(duì)象的公有成員方法來(lái)訪問(wèn),而公有成員是可以公開(kāi)使用的,既可以在類(lèi)的內(nèi)部進(jìn)行訪問(wèn),也可以在外部程序中使用。
  • 從形式上看,在定義類(lèi)的成員時(shí),如果成員名以?xún)蓚€(gè)下劃線(xiàn)開(kāi)頭但是不以?xún)蓚€(gè)下劃線(xiàn)結(jié)束則表示是私有成員,否則就不是私有成員。
  • Python并沒(méi)有對(duì)私有成員提供嚴(yán)格的訪問(wèn)保護(hù)機(jī)制,通過(guò)一種特殊方式“對(duì)象名._類(lèi)名__xxx”也可以在外部程序中訪問(wèn)私有成員,但這會(huì)破壞類(lèi)的封裝性,不建議這樣做。

在Python中,以下劃線(xiàn)開(kāi)頭的變量名和方法名有特殊的含義,尤其是在類(lèi)的定義中。

_xxx:受保護(hù)成員;
__xxx__:系統(tǒng)定義的特殊成員;
__xxx:私有成員,只有類(lèi)對(duì)象自己能訪問(wèn),子類(lèi)對(duì)象不能直接訪問(wèn)到這個(gè)成員,但在對(duì)象外部可以通過(guò)“對(duì)象名._類(lèi)名__xxx”這樣的特殊方式來(lái)訪問(wèn)。

注意:Python中不存在嚴(yán)格意義上的私有成員。

總結(jié)

到此這篇關(guān)于Python類(lèi)屬性和方法的調(diào)用的文章就介紹到這了,更多相關(guān)Python類(lèi)屬性和方法調(diào)用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Django MTV和MVC的區(qū)別詳解

    Django MTV和MVC的區(qū)別詳解

    這篇文章主要介紹了Django MTV和MVC的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python?ttkbootstrap?制作賬戶(hù)注冊(cè)信息界面的案例代碼

    Python?ttkbootstrap?制作賬戶(hù)注冊(cè)信息界面的案例代碼

    ttkbootstrap 是一個(gè)基于 tkinter 的界面美化庫(kù),使用這個(gè)工具可以開(kāi)發(fā)出類(lèi)似前端 bootstrap 風(fēng)格的 tkinter 桌面程序。本文重點(diǎn)給大家介紹Python?ttkbootstrap?制作賬戶(hù)注冊(cè)信息界面的案例代碼,感興趣的朋友一起看看吧
    2022-02-02
  • Python實(shí)現(xiàn)隨機(jī)生成一個(gè)漢字的方法分享

    Python實(shí)現(xiàn)隨機(jī)生成一個(gè)漢字的方法分享

    這篇文章主要為大家詳細(xì)介紹了Python如何實(shí)現(xiàn)隨機(jī)生成一個(gè)漢字的功能,文中的示例代碼講解詳細(xì),對(duì)我們深入了解Python有一定的幫助,需要的可以參考一下
    2023-01-01
  • Python基于回溯法子集樹(shù)模板解決0-1背包問(wèn)題實(shí)例

    Python基于回溯法子集樹(shù)模板解決0-1背包問(wèn)題實(shí)例

    這篇文章主要介紹了Python基于回溯法子集樹(shù)模板解決0-1背包問(wèn)題,簡(jiǎn)單描述了0-1背包問(wèn)題并結(jié)合具體實(shí)例形式分析了Python使用回溯法子集樹(shù)模板解決0-背包問(wèn)題的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-09-09
  • python基于watchdog庫(kù)全自動(dòng)化監(jiān)控目錄文件

    python基于watchdog庫(kù)全自動(dòng)化監(jiān)控目錄文件

    這篇文章主要介紹了python基于watchdog庫(kù)全自動(dòng)化監(jiān)控目錄文件,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • 基于Python?OpenCV和?dlib實(shí)現(xiàn)眨眼檢測(cè)

    基于Python?OpenCV和?dlib實(shí)現(xiàn)眨眼檢測(cè)

    這篇文章主要介紹了基于Python?OPenCV及dlib實(shí)現(xiàn)檢測(cè)視頻流中的眨眼次數(shù)。文中的代碼對(duì)我們的學(xué)習(xí)和工作有一定價(jià)值,感興趣的同學(xué)可以參考一下
    2021-12-12
  • 通過(guò)python模糊匹配算法對(duì)兩個(gè)excel表格內(nèi)容歸類(lèi)

    通過(guò)python模糊匹配算法對(duì)兩個(gè)excel表格內(nèi)容歸類(lèi)

    這篇文章主要介紹了通過(guò)python模糊匹配算法對(duì)兩個(gè)excel表格內(nèi)容歸類(lèi),比如兩個(gè)不同的工程項(xiàng)目針對(duì)的對(duì)象都是A,那么就需要將這兩個(gè)工程項(xiàng)目歸類(lèi)到A當(dāng)中,可以減少很大一部分工作量,,需要的朋友可以參考下
    2023-03-03
  • Django對(duì)接支付寶實(shí)現(xiàn)支付寶充值金幣功能示例

    Django對(duì)接支付寶實(shí)現(xiàn)支付寶充值金幣功能示例

    今天小編就為大家分享一篇Django對(duì)接支付寶實(shí)現(xiàn)支付寶充值金幣功能示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • 對(duì)python中array.sum(axis=?)的用法介紹

    對(duì)python中array.sum(axis=?)的用法介紹

    今天小編就為大家分享一篇對(duì)python中array.sum(axis=?)的用法介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • python實(shí)現(xiàn)發(fā)送和獲取手機(jī)短信驗(yàn)證碼

    python實(shí)現(xiàn)發(fā)送和獲取手機(jī)短信驗(yàn)證碼

    這篇文章主要介紹了python實(shí)現(xiàn)發(fā)送和獲取手機(jī)短信驗(yàn)證碼的相關(guān)資料,講解了python如何解決接口測(cè)試獲取手機(jī)驗(yàn)證碼問(wèn)題,感興趣的小伙伴們可以參考一下
    2016-01-01

最新評(píng)論

霍邱县| 台中市| 皮山县| 乐安县| 乌恰县| 阿尔山市| 绵阳市| 海晏县| 台中市| 定州市| 桃源县| 阿克陶县| 伊吾县| 大新县| 彭山县| 四会市| 平昌县| 涡阳县| 高阳县| 荥经县| 崇义县| 北安市| 任丘市| 黔西县| 即墨市| 常熟市| 甘孜县| 嫩江县| 丹巴县| 介休市| 旺苍县| 积石山| 开远市| 武清区| 桂阳县| 巴彦县| 苍溪县| 汉沽区| 新沂市| 宜章县| 镇康县|