日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

零基礎(chǔ)分分鐘理解python面向?qū)ο竽切┦履阋残校?/span>

 F2967527 2019-08-07

一、面向?qū)ο?/p>

1、面向過程

a、優(yōu)點(diǎn):極大的降低了寫程序的復(fù)雜度,只需要順著執(zhí)行的步驟,堆疊代碼即可

b、缺點(diǎn):一套流水線或者流程就是來解決一個(gè)問題,代碼就是牽一發(fā)而東莞全身

2、面向?qū)ο?/p>

a、優(yōu)點(diǎn):解決程序的擴(kuò)展性,對(duì)某一個(gè)對(duì)象單獨(dú)修改,會(huì)立刻反應(yīng)到整個(gè)體系中

b、缺點(diǎn):可控性差,無法向面向過程的程序設(shè)計(jì)流水線式的可以很精準(zhǔn)的預(yù)測問題的處理流程與結(jié)果,面向?qū)ο蟮某绦蛞坏╅_始就有對(duì)象之間的交互解決問題。

3、 類:具有相同特征的一類事物(人、狗、老虎)

4、對(duì)象/實(shí)例:具體的某一個(gè)事物(隔壁阿花、樓下旺財(cái))

5、實(shí)例化:類——>對(duì)象的過程

6、 在python中,用變量表示特征,用函數(shù)表示技能,因而具有相同特征和技能的一類事物就是‘類’,

7、對(duì)象是則是這一類事物中具體的一個(gè)

class Person: #定義一個(gè)人類

role = 'person' #人的角色屬性都是人

def walk(self): #人都可以走路,也就是有一個(gè)走路方法,也叫動(dòng)態(tài)屬性

print('person is walking...')

class 類名:

類屬性 = None def __init__(self,對(duì)象屬性):

self.對(duì)象屬性 = 對(duì)象屬性 def 方法名(self): pass實(shí)例 = 類名(10)

實(shí)例.方法名()

8、類的兩種作用:屬性引用和實(shí)例化

9、屬性引用(類名.屬性)

class Person: #定義一個(gè)人類

role = 'person' #人的角色屬性都是人

def walk(self): #人都可以走路,也就是有一個(gè)走路方法

print('person is walking...')print(Person.role) #查看人的role屬性print(Person.walk) #引用人的走路方法,注意,這里不是在調(diào)用。小編推薦一個(gè)學(xué)Python的學(xué)習(xí)裙【五八八,零九零,九四二】,無論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有很多干貨和技術(shù)分享

10、例化:類名加括號(hào)就是實(shí)例化,會(huì)自動(dòng)觸發(fā)__init__函數(shù)的運(yùn)行,可以用它來為每個(gè)實(shí)例定制自己的特征

class Person: #定義一個(gè)人類

role = 'person' #人的角色屬性都是人

def __init__(self,name):

self.name = name # 每一個(gè)角色都有自己的昵稱;

def walk(self): #人都可以走路,也就是有一個(gè)走路方法

print('person is walking...')print(Person.role) #查看人的role屬性print(Person.walk) #引用人的走路方法,注意,這里不是在調(diào)用

11、

類名

類名.類屬性

類名.方法名

實(shí)例 = 類名(參數(shù),參數(shù)) #實(shí)例就是對(duì)象實(shí)例

實(shí)例.方法名()

實(shí)例.對(duì)象屬性

實(shí)例增加屬性

實(shí)例.新的屬性名 = 1000print(實(shí)例.新的屬性名)

12、關(guān)于self

self:在實(shí)例化時(shí)自動(dòng)將對(duì)象/實(shí)例本身傳給__init__的第一個(gè)參數(shù),你也可以給他起個(gè)別的名字.

對(duì)象/實(shí)例只有一種作用:屬性引用

class 類名: def __init__(self,參數(shù)1,參數(shù)2):

self.對(duì)象的屬性1 = 參數(shù)1

self.對(duì)象的屬性2 = 參數(shù)2 def 方法名(self):pass

def 方法名2(self):pass對(duì)象名 = 類名(1,2) #對(duì)象就是實(shí)例,代表一個(gè)具體的東西

#類名() : 類名+括號(hào)就是實(shí)例化一個(gè)類,相當(dāng)于調(diào)用了__init__方法

#括號(hào)里傳參數(shù),參數(shù)不需要傳self,其他與init中的形參一一對(duì)應(yīng)

#結(jié)果返回一個(gè)對(duì)象對(duì)象名.對(duì)象的屬性1 #查看對(duì)象的屬性,直接用 對(duì)象名.屬性名 即可對(duì)象名.方法名() #調(diào)用類中的方法,直接用 對(duì)象名.方法名() 即可

dir(類) #返回類中的所有名字列表isinstance(對(duì)象,類) #判斷對(duì)象是否為類的實(shí)例print(Person.__dict__) # 返回一個(gè)字典 key是屬性名,value是屬性值print(Person.__module__) #person類所在的模塊print(Person.__name__,type(Person.__name__)) #字符串?dāng)?shù)據(jù)類型的類名

13、類命名空間與對(duì)象、實(shí)例的命名空間

a、常見一個(gè)類就會(huì)創(chuàng)建一個(gè)類的名稱空間,用來儲(chǔ)存類中定義的所有名字,這些名字成為類的屬性

b、而類有兩種屬性:靜態(tài)屬性和動(dòng)態(tài)屬性

靜態(tài)屬性就是直接在類中定義的變量

動(dòng)態(tài)屬性就是定義在類中的方法

創(chuàng)建一個(gè)對(duì)象/實(shí)例就會(huì)創(chuàng)建一個(gè)對(duì)象/實(shí)例的名稱空間,存放對(duì)象/實(shí)例的名字,稱為對(duì)象/實(shí)例的屬性

面相對(duì)象的組合用法:

組合指的是,在一個(gè)類中以另外一個(gè)類的對(duì)象作為數(shù)據(jù)屬性,稱為類的組

列子:

圓的周長與面積

14、面向?qū)ο蟮娜筇卣?/p>

a、繼承

class Animal: #父類 基類 超類

def __init__(self,name,life_value,aggr):

self.name = name

self.life_value = life_value

self.aggr = aggrclass Person(Animal): #子類 派生類

passclass Dog(Animal): #子類 派生類

passegg = Person('egon',1000,50)print(egg.name)print(egg.aggr

python2class Dad: #經(jīng)典類class Dag(object) #新式類python3class Dad == class Dag(object) #新式類

1、繼承的語法

class 類名(父類名): 想在子類中實(shí)現(xiàn)調(diào)用父類的方法 在類內(nèi) ——super(子類名,self).方法名() 在類外面 ——super(子類名,對(duì)象名).方法名() 如果不指定繼承的父類,默認(rèn)繼承object 子類可以使用父類的所有屬性和方法 如果子類有自己的方法就執(zhí)行自己的的 如果是子類沒有的方法就執(zhí)行父類的 如果子類父類都沒有這個(gè)方法就報(bào)錯(cuò)

繼承、抽象、派生

繼承 是從大范圍到小范圍

抽象 小范圍到大范圍

派生 就是在父類的基礎(chǔ)上又產(chǎn)生子類——派生類

父類里沒有的 但子類有的 ——派生方法

派生屬性

方法的重寫

父類里有的方法,在子類里重新實(shí)現(xiàn)

2、繼承的兩種用途:

b:繼承基類的方法,并且做出自己的改變或者擴(kuò)展(代碼重用)

a:聲明某個(gè)子類兼容于某基類,定義一個(gè)接口類Interface,接口類中定義

了一些接口名(就是函數(shù)名)且并未實(shí)現(xiàn)接口的功能,子類繼承接口類,并且實(shí)現(xiàn)接口中的功能

b、封裝

1、優(yōu)點(diǎn):

a、將變化隔離

b、封裝使用

c、提高復(fù)用性

d、提高安全性

2、封裝原則:

a、將不需要對(duì)外提供的內(nèi)容都隱藏起來

b、把屬性都隱藏起來提供公共方法對(duì)其訪問

3、私有變量和私有方法

a、在python中用雙劃線的開頭的的方式降屬性隱藏起來(設(shè)置私有的)

property屬性

property是一種特殊的屬性,訪問它時(shí)會(huì)執(zhí)行一段功能(函數(shù))然后返回值

c、多態(tài):”多態(tài)指的是一類事物有多種形態(tài)(比如:老師.下課鈴響了(),學(xué)生.下課鈴響了(),老師執(zhí)行的是下班操作,學(xué)生執(zhí)行的是放學(xué)操作,雖然二者消息一樣,但是執(zhí)行的效果不同)

多態(tài)指的是:一類實(shí)物有多種狀態(tài)

python自帶多態(tài):

多態(tài):同一類事物的多種狀態(tài)

python里處處都是多態(tài),只是我們一般發(fā)現(xiàn)不了

操作的時(shí)候不需要關(guān)心這個(gè)對(duì)象的數(shù)據(jù)類型,你只要用就行了

15、反射

1、 反射:可以用字符串的方式去訪問對(duì)象的屬性,調(diào)用對(duì)象的方法(但是不能去訪問方法),python中一切皆對(duì)象,都可以使用反射。

2、反射有四種方法:

hasattr:hasattr(object,name)判斷一個(gè)對(duì)象是否有name屬性或者name方法。有就返回True,沒有就返回False

getattr:獲取對(duì)象的屬性或者方法,如果存在則打印出來。hasattr和getattr配套使用

需要注意的是,如果返回的是對(duì)象的方法,返回出來的是對(duì)象的內(nèi)存地址,如果需要運(yùn)行這個(gè)方法,可以在后面添加一對(duì)()

setattr:給對(duì)象的屬性賦值,若屬性不存在,先創(chuàng)建后賦值

delattr:刪除該對(duì)象指定的一個(gè)屬性

a、內(nèi)置方法:isinstance和issubclass

isinstance(obj,cls)檢查是否obj是否是類 cls 的對(duì)象

class Foo: passclass Son(Foo): passs=Son()print(isinstance(s,Son))

b、內(nèi)置方法:issubclass(sub, super)檢查sub類是否是 super 類的派生類

class Foo(object): pass

class Bar(Foo): pass

issubclass(Bar, Foo)

c、python面向?qū)ο笾械姆瓷洌和ㄟ^字符串的形式操作對(duì)象相關(guān)的屬性,python中一切事物都是對(duì)象(都可以用反射)

檢查是否含有某屬性---hasattr 返回布爾值

獲取屬性---getattr 沒有就會(huì)報(bào)錯(cuò)

設(shè)置屬性---setattr

刪除屬性---delattr

d、內(nèi)置方法:__del__

析構(gòu)方法,當(dāng)對(duì)象在內(nèi)存中被釋放時(shí),自動(dòng)觸發(fā)執(zhí)行。

注:此方法一般無須定義,因?yàn)镻ython是一門高級(jí)語言,程序員在使用時(shí)無需關(guān)心內(nèi)存的分配和釋放,因?yàn)榇斯ぷ鞫际墙唤oPython解釋器來執(zhí)行,所以,析構(gòu)函數(shù)的調(diào)用是由解釋器在進(jìn)行垃圾回收時(shí)自動(dòng)觸發(fā)執(zhí)行的。

class Foo: def __del__(self): print('fgs')

f=Foo()print(123)print(123)del fprint(123)print(123)print(123)

e、內(nèi)置方法:item系列

__getitem__\__setitem__\__delitem__

__new__

class A: def __init__(self): #有一個(gè)方法在幫你創(chuàng)造self

print('in init function')

self.x=1 def __new__(cls, *args, **kwargs): print('in init funct') return object.__new__(A,*args,**kwargs)

a=A()

f、__str__和__repr__改變對(duì)象的字符串顯示

__str__,__repr__

15、內(nèi)置方法

a、靜態(tài)方法和類方法

1、類方法:有個(gè)默認(rèn)參數(shù)cls,并且可以直接用類名去調(diào)用,可以與類屬性交互(也就是可以使用類屬性)

2、靜態(tài)方法:讓類里的方法直接被類調(diào)用,就像正常調(diào)用函數(shù)一樣

b、類方法和靜態(tài)方法的相同點(diǎn):都可以直接被類調(diào)用,不需要實(shí)例化

c、類方法和靜態(tài)方法的不同點(diǎn):

類方法必須有一個(gè)cls參數(shù)表示這個(gè)類,可以使用類屬性

靜態(tài)方法不需要參數(shù)

d、綁定方法:分為普通方法和類方法

普通方法:默認(rèn)有一個(gè)self對(duì)象傳進(jìn)來,并且只能被對(duì)象調(diào)用-------綁定到對(duì)象

類方法:默認(rèn)有一個(gè)cls對(duì)象傳進(jìn)來,并且可以被類和對(duì)象(不推薦)調(diào)用-----綁定到類

e、非綁定方法:靜態(tài)方法:沒有設(shè)置默認(rèn)參數(shù),并且可以被類和對(duì)象(不推薦)調(diào)用-----非綁定

16、接口類與抽象類

a、 接口類:(在抽象類的基礎(chǔ)上)

在python中,默認(rèn)是沒有接口類的

接口類不能被實(shí)例化(如果實(shí)例化會(huì)報(bào)錯(cuò))

接口類中的方法不能被實(shí)現(xiàn)

接口也就是做約束,讓下面的類的方法都按照接口類中給出的方法去定義。如果接口類里面有的方法類里面沒有,那么那個(gè)類就不能被實(shí)例化。(字面理解)

繼承的第二種含義非常重要。它又叫“接口繼承”。

接口繼承實(shí)質(zhì)上是要求“做出一個(gè)良好的抽象,這個(gè)抽象規(guī)定了一個(gè)兼容接口,使得外部調(diào)用者無需關(guān)心具體細(xì)節(jié),可一視同仁的處理實(shí)現(xiàn)了特定接口的所有對(duì)象”——這在程序設(shè)計(jì)上,叫做歸一化。

b、抽象類

在python中,默認(rèn)是有的

父類的方法,子類必須實(shí)現(xiàn)

抽象類(父類)的方法可以被實(shí)現(xiàn)

抽象類和接口類的區(qū)別:接口類不能實(shí)現(xiàn)方法,抽象類可以實(shí)現(xiàn)方法里面的內(nèi)容

抽象類和接口類的相同點(diǎn):都是用來做約束的,都不能被實(shí)例化

抽象類和接口類的使用:

當(dāng)幾個(gè)子類的父類有相同的功能需要被實(shí)現(xiàn)的時(shí)候就用抽象類

當(dāng)幾個(gè)子類有相同的功能,但是實(shí)現(xiàn)各不相同的時(shí)候就用接口類

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多