日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

面向对象进阶篇

發(fā)布時(shí)間:2025/3/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面向对象进阶篇 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
  • 面向?qū)ο笫且环N編程方式,此編程方式的實(shí)現(xiàn)是基于對(duì)??和?對(duì)象?的使用
  • 類 是一個(gè)模板,模板中包裝了多個(gè)“函數(shù)”供使用(可以講多函數(shù)中公用的變量封裝到對(duì)象中)
  • 對(duì)象,根據(jù)模板創(chuàng)建的實(shí)例(即:對(duì)象),實(shí)例用于調(diào)用被包裝在類中的函數(shù)
  • 面向?qū)ο笕筇匦?#xff1a;封裝、繼承和多態(tài)

類的成員

類的成員可以分為三大類:字段、方法和屬性

?

注:所有成員中,只有普通字段的內(nèi)容保存對(duì)象中,即:根據(jù)此類創(chuàng)建了多少對(duì)象,在內(nèi)存中就有多少個(gè)普通字段。而其他的成員,則都是保存在類中,即:無(wú)論對(duì)象的多少,在內(nèi)存中只創(chuàng)建一份。

一、字段

字段包括:普通字段和靜態(tài)字段,他們?cè)诙x和使用中有所區(qū)別,而最本質(zhì)的區(qū)別是內(nèi)存中保存的位置不同,

  • 普通字段屬于對(duì)象
  • 靜態(tài)字段屬于
class Proice:#靜態(tài)字段country = "中國(guó)"def __init__(self,name):#普通字段self.name = name ret = Proice("山西") print(ret.name) #直接訪問(wèn)普通字段 print(ret.country) #直接訪問(wèn)靜態(tài)字段 View Code

應(yīng)用場(chǎng)景: 通過(guò)類創(chuàng)建對(duì)象時(shí),如果每個(gè)對(duì)象都具有相同的字段,那么就使用靜態(tài)字段

二、方法

方法包括:普通方法、靜態(tài)方法和類方法,三種方法在內(nèi)存中都?xì)w屬于類,區(qū)別在于調(diào)用方式不同。

  • 普通方法:由對(duì)象調(diào)用;至少一個(gè)self參數(shù);執(zhí)行普通方法時(shí),自動(dòng)將調(diào)用該方法的對(duì)象賦值給self
  • 類方法:由調(diào)用; 至少一個(gè)cls參數(shù);執(zhí)行類方法時(shí),自動(dòng)將調(diào)用該方法的復(fù)制給cls
  • 靜態(tài)方法:由調(diào)用;無(wú)默認(rèn)參數(shù);
class Paric:def func(self):#普通方法print("name")@classmethod#類方法 最少有一個(gè)參數(shù)def xxoo(cls,arg1,arg2):print(arg1,arg2)#靜態(tài)方法 可也加參數(shù)也可以不加參數(shù) @staticmethoddef xo():print("xo") ret = Paric() #創(chuàng)建對(duì)象 ret.func() #對(duì)象調(diào)用普通方法 Paric.xxoo(1,2) #類調(diào)用類方法 Paric.xo() #類調(diào)用靜態(tài)方法 View Code

三、屬性  

如果你已經(jīng)了解Python類中的方法,那么屬性就非常簡(jiǎn)單了,因?yàn)镻ython中的屬性其實(shí)是普通方法的變種。

對(duì)于屬性,有以下三個(gè)知識(shí)點(diǎn):

  • 屬性的基本使用
  • 屬性的兩種定義方式
  • 調(diào)用時(shí),無(wú)需括號(hào)?
class Foo:def __init__(self,name):self.name = name#獲取 @propertydef func(self):temp = self.namereturn temp#設(shè)置 @func.setterdef func(self,value):self.name = value#調(diào)用 @func.deleterdef func(self):del self.nameret = Foo("Wyc") r = ret.func #獲取 print(r) del ret.func #刪除 ret.func = "nihao" #設(shè)置 View Code

靜態(tài)字段方式,創(chuàng)建值為country對(duì)象的靜態(tài)字段

class Foo:#靜態(tài)字段country ="中國(guó)"def func(self):print("11") #類調(diào)用靜態(tài)方法 print(Foo.country) View Code

類成員的修飾符

類的所有成員在上一步驟中已經(jīng)做了詳細(xì)的介紹,對(duì)于每一個(gè)類的成員而言都有兩種形式:

  • 公有成員,在任何地方都能訪問(wèn)
  • 私有成員,只有在類的內(nèi)部才能使用方法

私有成員和公有成員的定義不同:私有成員命名時(shí),前兩個(gè)字符是下劃線。(特殊成員除外,例如:__init__、__call__、__dict__等)

class Foo:#私有字段__yer = "Wyc"def func(self):#用類調(diào)用私有字段,只能在內(nèi)部調(diào)用。print(Foo.__yer) ret = Foo() ret.func() View Code class Foo:#公有靜態(tài)字段name = "中國(guó)"def func(self):pass#公有靜態(tài)字段由類調(diào)用 print(Foo.name) View Code

類的特殊成員

?

?__doc__

  表示類的描述信息

class Foo:"""這是__doc__的方法"""def func(self):pass#由類直接調(diào)用,類的注釋 print(Foo.__doc__) View Code class Foo:#構(gòu)造方法,簡(jiǎn)稱封裝def __init__(self):self.name = "wyc"def func(self):print(self.name) ret = Foo() ret.func() View Code

__call__

  對(duì)象后面加括號(hào),觸發(fā)執(zhí)行。

class Foo:def func(self):passdef __call__(self, *args, **kwargs):print("123") ret = Foo() ret() #對(duì)象后邊加括號(hào)自動(dòng)觸發(fā)__call__方法 View Code

?__dict__

  類或?qū)ο笾械乃谐蓡T

class Foo:def func(self):pass ret = Foo.__dict__ #查看類或?qū)ο笾械乃谐蓡T print(ret) View Code

?__str__

  如果一個(gè)類中定義了__str__方法,那么在打印 對(duì)象 時(shí),默認(rèn)輸出該方法的返回值。

class Foo: #默認(rèn)輸出該↓方法的默認(rèn)值def __str__(self):return "Wyc" ret = Foo() print(ret) View Code

?__getitem__、__setitem__、__delitem__

用于索引操作,如字典。以上分別表示獲取、設(shè)置、刪除數(shù)據(jù)

class Foo:def __setitem__(self,key,value):print(key,value) r = Foo() r["xxx"] = 123 #對(duì)象后邊加中括號(hào)就會(huì)執(zhí)行__setitem__方法,一個(gè)key,一個(gè)value View Code

?

class Foo:def __delitem__(self,key):print(key) r = Foo() del r["xxx"] #執(zhí)行__delitem__方法,刪除key View Code

?

class Foo:def __getitem__(self, item):print(item) r = Foo() r["123456"] #對(duì)象后邊加個(gè)中括號(hào)就會(huì)自動(dòng)執(zhí)行 View Code

?__iter__?

用于迭代器,之所以列表、字典、元組可以進(jìn)行for循環(huán),是因?yàn)轭愋蛢?nèi)部定義了 __iter_

class Foo(object):def __init__(self,sq):self.sq = sqdef __iter__(self):return iter(self.sq) obj = Foo([11,22,33,44,55]) for i in obj:print(i) View Code

總結(jié):

成員:

? ? ?字段 ? ? ?靜態(tài)字段(每個(gè)對(duì)象都有一份),普通字段(每個(gè)對(duì)象都有不同的數(shù)據(jù))

? ? ?方法 ? ? ?靜態(tài)方法(無(wú)需使用對(duì)象封裝的內(nèi)容),類方法,普通方法(使用對(duì)象中的數(shù)據(jù))

? ? ?特性 ? ? ?普通特性(將方法偽造成字段)

如何快速判斷,類執(zhí)行,或者對(duì)象執(zhí)行:

? ? ? ? ? ? ? ? ?有self的對(duì)象調(diào)用

? ? ? ? ? ? ? ? ?無(wú)self的,類調(diào)用

總結(jié)

以上是生活随笔為你收集整理的面向对象进阶篇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。