自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解Python面向?qū)ο笾R(shí)點(diǎn)

開(kāi)發(fā)
本文我以python為例,帶大家快速搞定面向?qū)ο笾械暮诵母拍畈⑼ㄟ^(guò)代碼實(shí)現(xiàn)的方式來(lái)幫助大家對(duì)其加深理解!

 目前代碼技能已經(jīng)成了測(cè)試同學(xué)面試考核的剛需,對(duì)于測(cè)試開(kāi)發(fā)來(lái)講需求最大的是java和python兩門(mén)語(yǔ)言,二者也都是面向?qū)ο笳Z(yǔ)言。對(duì)于剛?cè)腴T(mén)代碼的同學(xué)來(lái)說(shuō)面向?qū)ο笙嚓P(guān)的概念比較難于理解,而面向?qū)ο缶幊滔嚓P(guān)的知識(shí)點(diǎn)偏偏又是面試中的高頻問(wèn)題,所以本文我以python為例,帶大家快速搞定面向?qū)ο笾械暮诵母拍畈⑼ㄟ^(guò)代碼實(shí)現(xiàn)的方式來(lái)幫助大家對(duì)其加深理解!

[[344923]]

面向?qū)ο蠡A(chǔ)

對(duì)象

對(duì)象有兩個(gè)層次的概念,現(xiàn)實(shí)生活中對(duì)象指的是客觀世界的實(shí)體;而程序中對(duì)象就是一組變量和相關(guān)方法的集合,其中變量表明對(duì)象的狀態(tài),方法表明對(duì)象所具有的行為。可以將現(xiàn)實(shí)生活中的對(duì)象經(jīng)過(guò)抽象,映射為程序中的對(duì)象,對(duì)象是對(duì)現(xiàn)實(shí)的高度抽象。

類(lèi)

對(duì)象在程序中是通過(guò)一種抽象數(shù)據(jù)類(lèi)型來(lái)描述的,這種抽象數(shù)據(jù)類(lèi)型即Class。類(lèi)是描述對(duì)象的“基本原型”,它定義一類(lèi)對(duì)象所能擁有的數(shù)據(jù)和能完成的操作。在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,類(lèi)是程序的基本單元。

類(lèi)和對(duì)象的關(guān)系

對(duì)象是類(lèi)的一個(gè)實(shí)例,創(chuàng)建一個(gè)對(duì)象就是類(lèi)進(jìn)行了實(shí)例化,從代碼角度講就是在內(nèi)存中開(kāi)辟了一塊新的地址空間運(yùn)行程序。一個(gè)類(lèi)可以創(chuàng)建無(wú)數(shù)個(gè)實(shí)例(只要計(jì)算機(jī)的內(nèi)存足夠大),使用python代碼實(shí)現(xiàn)如下:

dog =Animal()

即對(duì)象dog是類(lèi)Animal的一個(gè)實(shí)例。

屬性

存儲(chǔ)對(duì)象的狀態(tài),可以理解為變量。

方法

實(shí)現(xiàn)對(duì)象的行為,可以理解為函數(shù)。

上面是面向?qū)ο罄碚摰慕忉專(zhuān)覀円匀?dòng)物園看動(dòng)物為例,我們通常說(shuō)去看動(dòng)物,但是沒(méi)有人能夠看到動(dòng)物這個(gè)抽象的東東,我們只能看到具體的某一種類(lèi)的動(dòng)物。這里的動(dòng)物就是類(lèi)的概念,而我們看的具體動(dòng)物,例如:東北虎就是實(shí)例。關(guān)于動(dòng)物的種類(lèi)、顏色以及雌雄就是動(dòng)物的屬性,而動(dòng)物具備的基礎(chǔ)能力,例如:跑、吃、叫等等,我們則可以將其定義為方法。

面向?qū)ο笕瓌t

面向?qū)ο笕瓌t包括:封裝、繼承、多態(tài)。

封裝

封裝實(shí)際上是使用方法將類(lèi)的數(shù)據(jù)隱藏起來(lái),控制用戶對(duì)類(lèi)的修改和訪問(wèn)數(shù)據(jù)的程度。我們?cè)谑褂胊pi時(shí),如果提供方不給我們?cè)创a,我們是無(wú)法知道其內(nèi)部實(shí)現(xiàn)的,但是這并不會(huì)妨礙我們對(duì)api的使用。簡(jiǎn)單規(guī)則如下:

xx: 公有變量或方法;

_xx:變量或方法前面加雙前置下劃線,無(wú)法在外部直接訪問(wèn);

class Demo(object):

public_var="共有變量"

__private_var = "私有變量"

def public_func(self):

print("共有方法")

def __private_func(self):

print("私有方法")

d=Demo()

d.public_func()

d.__private_func()

當(dāng)執(zhí)行代碼時(shí)會(huì)報(bào)錯(cuò):

AttributeError: 'Demo' object has no attribute '__private_func'

錯(cuò)誤信息提示,Demo中找不到方法__private_func,原因是該方法是私有方法,不能被Demo類(lèi)以外的模塊或者類(lèi)調(diào)用!所以大家在設(shè)計(jì)類(lèi)中的方法或者屬性時(shí)需要考慮好是否需要被外部調(diào)用,如果需要?jiǎng)t設(shè)計(jì)成xx形式,如果不需要?jiǎng)t設(shè)計(jì)成__xx形式。對(duì)于剛?cè)腴T(mén)編碼的小白來(lái)說(shuō),把屬性和方法都設(shè)計(jì)成共有即可。

繼承

繼承性是面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言的另一基本特征,通過(guò)繼承可以實(shí)現(xiàn)代碼的復(fù)用。繼承而得到的類(lèi)為子類(lèi),被繼承的類(lèi)為父類(lèi),所有直接或間接被繼承的類(lèi)都是父類(lèi)。繼承是子類(lèi)利用父類(lèi)中定義的方法和變量,就像它們屬于子類(lèi)自己一樣。Python中支持多重繼承。如下代碼表示Dog類(lèi)繼承Animal類(lèi)并通過(guò)Dog(Animal)實(shí)現(xiàn),在python中object類(lèi)是所有類(lèi)的父類(lèi),所以Animal繼承object類(lèi)。

class Animal(object):

def run(self):

print('Animal isrunning...')

class Dog(Animal):

pass

子類(lèi)使用父類(lèi)的run方法就像使用他自己的方法一樣!

dog=Dog()

dog.run()

特征:

(1)繼承關(guān)系是傳遞的。如果類(lèi)C繼承類(lèi)B,類(lèi)B繼承類(lèi)A(多繼承),則類(lèi)C既有從類(lèi)B那里繼承下來(lái)的屬性與方法,也有從類(lèi)A那里繼承下來(lái)的屬性與方法,還可以有自己新定義的屬性和方法。繼承來(lái)的屬性和方法盡管是隱式的,但仍是類(lèi)C的屬性和方法。繼承是在一些比較一般的類(lèi)的基礎(chǔ)上構(gòu)造、建立和擴(kuò)充新類(lèi)的最有效的手段。

(2)繼承簡(jiǎn)化了人們對(duì)事物的認(rèn)識(shí)和描述,能清晰體現(xiàn)相關(guān)類(lèi)之間的層次結(jié)構(gòu)關(guān)系。

(3)繼承提供了軟件復(fù)用功能。如果類(lèi)B繼承類(lèi)A,則建立類(lèi)B時(shí)只需要再描述與基類(lèi)(類(lèi)A)不同的少量特征(數(shù)據(jù)成員和成員方法)即可。這種做法能減小代碼和數(shù)據(jù)的冗余度,大大增加程序的重用性。

(4)繼承通過(guò)增強(qiáng)一致性來(lái)減少模塊間的接口和界面,大大增加了程序的易維護(hù)性。

(5)提供多重繼承機(jī)制。從理論上說(shuō),一個(gè)類(lèi)可以是多個(gè)一般類(lèi)的特殊類(lèi),它可以從多個(gè)一般類(lèi)中繼承屬性與方法,這便是多重繼承。

多態(tài)

多態(tài)(Polymorphism)按字面的意思就是“多種狀態(tài)”。在面向?qū)ο笳Z(yǔ)言中,接口的多種不同的實(shí)現(xiàn)方式即為多態(tài)。引用Charlie Calverts對(duì)多態(tài)的描述——多態(tài)性是允許你將父對(duì)象設(shè)置成為一個(gè)或更多的他的子對(duì)象相等的技術(shù),賦值之后,父對(duì)象就可以根據(jù)當(dāng)前賦值給它的子對(duì)象的特性以不同的方式運(yùn)作。類(lèi)具有繼承關(guān)系,并且子類(lèi)類(lèi)型可以向上轉(zhuǎn)型看做父類(lèi)類(lèi)型。舉一個(gè)例子大家就懂了

#定義類(lèi)Animal

class Animal(object):

def run(self):

print('Animal is running...'

#定義類(lèi)Chicken,重寫(xiě)Animal的run方法

class Chicken(Animal):

def run(self):

print('Chicken is running with 2 legs')

#定義類(lèi)Fish,重寫(xiě)Animal的run方法

class Fish(Animal):

def run(self):

print('fish is swimming')

chicken=Chicken()

chicken.run()

fish=Fish()

fish.run()

animal=Animal()

animal.run()

#定義一個(gè)函數(shù)調(diào)用run方法

def which_animal_running(p_obj):

p_obj.run()

這種行為稱(chēng)為多態(tài)。也就是說(shuō),方法調(diào)用將作用在p_obj的實(shí)際類(lèi)型上。它實(shí)際上擁有自己的 run()方法以及從Animal類(lèi)繼承的 run()方法,但調(diào)用 p_obj.run()總是先查找它自身的定義,如果沒(méi)有定義,則順著繼承鏈向上查找,直到在某個(gè)父類(lèi)中找到為止。

which_animal_running(chicken) #執(zhí)行Chicken類(lèi)的run方法

which_animal_running(fish) #執(zhí)行Fish類(lèi)的run方法

which_animal_running(animal) #執(zhí)行Animal類(lèi)的run方法

 

責(zé)任編輯:姜華 來(lái)源: 今日頭條
相關(guān)推薦

2017-09-15 15:48:12

Python面向?qū)ο蠹夹g(shù)類(lèi)與對(duì)象

2023-07-04 08:33:46

Python對(duì)象編程

2016-05-30 17:31:34

Spring框架

2010-08-17 14:56:00

HCNE認(rèn)證

2011-04-15 12:25:21

BGP路由

2021-06-07 05:32:53

Webpack Chunk 前端

2009-06-26 13:29:11

面向?qū)ο?/a>

2020-08-24 15:25:27

Python 開(kāi)發(fā)運(yùn)維

2020-08-24 13:15:59

Python代碼描述符

2024-09-19 16:00:01

網(wǎng)絡(luò)編程網(wǎng)絡(luò)Python

2021-01-18 10:33:53

Java反射模塊

2009-08-06 17:42:32

C#知識(shí)點(diǎn)

2009-12-18 17:34:38

Ruby線程

2010-06-17 16:42:04

UML

2010-07-27 15:49:28

Flex

2009-06-26 13:56:20

UML面向?qū)ο蠼?/a>

2024-09-09 06:00:00

Python輸入編程

2018-01-16 12:31:33

Python爬蟲(chóng)數(shù)據(jù)

2010-09-02 10:11:11

華為認(rèn)證

2010-08-18 10:52:46

Linux筆試
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)