亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python3.5面向?qū)ο缶幊虉D文與實(shí)例詳解

 更新時(shí)間:2019年04月24日 10:44:28   作者:loveliuzz  
這篇文章主要介紹了Python3.5面向?qū)ο缶幊?結(jié)合圖文與實(shí)例形式詳細(xì)分析了Python面向?qū)ο缶幊滔嚓P(guān)的概念、類定義、實(shí)例化、實(shí)例變量、類變量、析構(gòu)函數(shù)等相關(guān)原理及使用技巧,需要的朋友可以參考下

本文實(shí)例講述了Python3.5面向?qū)ο缶幊?。分享給大家供大家參考,具體如下:

1、面向過(guò)程與面向?qū)ο蟮谋容^

(1)面向過(guò)程編程(procedural programming)

面向過(guò)程編程又被稱為:top-down languages,程序從上到下 一步步執(zhí)行,從頭到尾的解決問(wèn)題。

基本設(shè)計(jì)思路為:程序一開(kāi)始是解決一個(gè)大問(wèn)題,然后把大問(wèn)題分解成多個(gè)小問(wèn)題或子過(guò)程,這些小問(wèn)題執(zhí)行的時(shí)候再繼續(xù)分解,

直到小問(wèn)題足夠簡(jiǎn)單到可以在一個(gè)小范圍內(nèi)解決。

缺點(diǎn):若程序要進(jìn)行修改,則修改的部分依賴的各個(gè)部分也要修改,這樣會(huì)發(fā)生一連串的影響,隨著程序越來(lái)越大,編程方式的維護(hù)難度也會(huì)越來(lái)越高。

所以,如果寫一下簡(jiǎn)單的腳本,去做一些一次性的任務(wù),用面向過(guò)程的方式是極好的,如果要處理的任務(wù)是復(fù)雜的,且需要不斷迭代和維護(hù)的,還是用面向?qū)ο笫亲罘奖愕摹?/p>

(2)面向?qū)ο缶幊蹋╫op)

面向?qū)ο缶幊淌抢谩邦悺焙汀皩?duì)象”來(lái)創(chuàng)建各種模型來(lái)實(shí)現(xiàn)對(duì)真實(shí)世界的描述。

優(yōu)點(diǎn):可以使程序的維護(hù)和擴(kuò)展變得簡(jiǎn)單,并且可以大大提高程序的開(kāi)發(fā)效率;另外,基于對(duì)象的程序編程,可以讓別人更加理解你的代碼邏輯,是團(tuán)隊(duì)開(kāi)發(fā)變得更加從容。

核心的特征:世界萬(wàn)物皆對(duì)象,世界萬(wàn)物皆可分類。

a、類(class)

類:是對(duì)一類擁有相同屬性的對(duì)象的抽象、藍(lán)圖、原型。在類中定義了這些對(duì)象都具備的屬性、共同的方法。

b、對(duì)象(object)

對(duì)象:類實(shí)例化后的實(shí)例,一個(gè)類必須經(jīng)過(guò)實(shí)例化方能在程序中調(diào)用。

一個(gè)類可以實(shí)例化多個(gè)對(duì)象,每個(gè)對(duì)象可以有不同的屬性。人類是指使用的人,每個(gè)人是指具體的對(duì)象。

c、封裝(encapsulation)

在類中對(duì)數(shù)據(jù)的賦值、內(nèi)部調(diào)用對(duì)外部用戶是透明的,這使類變成了一個(gè)膠囊或容器,里面包含著類的數(shù)據(jù)和方法。

d、繼承(Inheritance)

一個(gè)類可以派生出子類,在這個(gè)父類里定義的屬性、方法自動(dòng)被子類繼承。

e、多態(tài)(Polymorphism)

多態(tài):是面向?qū)ο蟮闹匾匦?簡(jiǎn)單點(diǎn)說(shuō):“一個(gè)接口,多種實(shí)現(xiàn)”,指一個(gè)基類中派生出了不同的子類,

且每個(gè)子類在繼承了同樣的方法名的同時(shí)又對(duì)父類的方法做了不同的實(shí)現(xiàn),這就是同一種事物表現(xiàn)出的多種形態(tài)。

編程其實(shí)就是一個(gè)將具體世界進(jìn)行抽象化的過(guò)程,多態(tài)就是抽象化的一種體現(xiàn)。

把一系列具體事物的共同點(diǎn)抽象出來(lái), 再通過(guò)這個(gè)抽象的事物, 與不同的具體事物進(jìn)行對(duì)話。

多態(tài)允許將子類的對(duì)象當(dāng)作父類的對(duì)象使用,某父類型的引用指向其子類型的對(duì)象,調(diào)用的方法是該子類型的方法。

這里引用和調(diào)用方法的代碼編譯前就已經(jīng)決定了,而引用所指向的對(duì)象可以在運(yùn)行期間動(dòng)態(tài)綁定。

2、面向?qū)ο缶幊?/strong>

(1)無(wú)論什么形式的編程,都要明確一下原則:寫重復(fù)的代碼是非常不好的地級(jí)行為;之前寫的代碼需要不斷的更新。

所以,開(kāi)發(fā)的程序要遵循易讀、易改的原則,即:可讀性好、易擴(kuò)展。

(2)示例代碼:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

#面向?qū)ο?-CS游戲模擬

class Role(object):
  def __init__(self,name,role,weapon,life_value=100,money=15000):
    self.name = name
    self.role = role
    self.weapon = weapon
    self.life_value = life_value
    self.money = money

  def shot(self):
    print("shotting...")

  def got_shot(self):
    print("ah...%s got shot..." %self.name)

  def buy_gun(self,gun_name):
    print("%s just bought %s" %(self.name,gun_name))

r1 = Role("Jack","police","AK-47")  #實(shí)例化(初始化一個(gè)類,創(chuàng)建了一個(gè)對(duì)象)
r1.buy_gun("B51")

r2 = Role("Amy","terrorist","B22") 
r2.got_shot()

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

Jack just bought B51
ah...Amy got shot...

注:

a、類的基本定義


第一句:定義一個(gè)類,class是定義類的語(yǔ)法,Role是類名,(object)是新式類的寫法,必須這樣寫;

第二句:__init__()叫做初始化方法,也叫構(gòu)造方法(雖然它是函數(shù)的形式,但在類中就不叫函數(shù)了,叫做方法),在類被調(diào)用時(shí)這個(gè)方法會(huì)自動(dòng)執(zhí)行,進(jìn)行一些初始化動(dòng)作,

所以__init__(self,name,role,weapon,life_value=100,money=15000)就是要在創(chuàng)建一個(gè)角色時(shí)給它設(shè)置這些屬性。


b、實(shí)例化:把一個(gè)類變成一個(gè)具體的對(duì)象的過(guò)程叫實(shí)例化。


在這里,實(shí)例化生成一個(gè)角色,會(huì)自動(dòng)把參數(shù)傳給類Role下面的__init__(...)方法。

初始化一個(gè)角色,就需要調(diào)用這個(gè)類一次;上面的創(chuàng)建角色時(shí),并沒(méi)有給__init__(...)傳值,是因?yàn)轭愒谡{(diào)用它自己的__init__(...)是自己幫你給self參數(shù)賦值了。


執(zhí)行r1 = Role('liu','police','AK47')時(shí),python的解釋器其實(shí)干了兩件事:
1、  在內(nèi)存中開(kāi)辟一塊空間指向r1這個(gè)變量名。
2、  調(diào)用Role這個(gè)類并執(zhí)行其中的__init__(…)方法,相當(dāng)于Role.__init__(r1,'Jack','police','AK47'),這么做是為什么呢? 

是為了把'Jack','police','AK47'這3個(gè)值跟剛開(kāi)辟的r1關(guān)聯(lián)起來(lái),因?yàn)殛P(guān)聯(lián)起來(lái)后,你就可以直接r1.name, r1.weapon 這樣來(lái)調(diào)用。

所以,為實(shí)現(xiàn)這種關(guān)聯(lián),在調(diào)用__init__方法時(shí),就必須把r1這個(gè)變量也傳進(jìn)去,否則__init__不知道要把那3個(gè)參數(shù)跟誰(shuí)關(guān)聯(lián)。

所以這個(gè)__init__(…)方法里的,self.name = name , self.role = role 等等的意思就是要把這幾個(gè)值 存到r1的內(nèi)存空間里。


結(jié):self就是示例本身,實(shí)例化時(shí)Python會(huì)自動(dòng)把這個(gè)示例本身通過(guò)self參數(shù)傳遞進(jìn)去。



r1.buy_gun("B51")===》Python會(huì)自動(dòng)轉(zhuǎn)換成:Role.buy_gun(r1,"B51”)

依然沒(méi)給self傳值 ,但Python還是會(huì)自動(dòng)的幫你把r1 賦值給self這個(gè)參數(shù), 為什么呢? 因?yàn)?,你在buy_gun(..)方法中可能要訪問(wèn)r1的一些其它屬性, 

比如這里就訪問(wèn) 了r1的名字,怎么訪問(wèn)呢?你得告訴這個(gè)方法,于是就把r1傳給了這個(gè)self參數(shù),然后在buy_gun里調(diào)用 self.name 就相當(dāng)于調(diào)用r1.name ,

如果還想知道r1的生命值 有多少,直接寫成self.life_value就可以了。

總結(jié):

a、上面的這個(gè)r1 = Role('Alex','police','AK47')動(dòng)作,叫做類的“實(shí)例化”, 就是把一個(gè)虛擬的抽象的類,通過(guò)這個(gè)動(dòng)作,變成了一個(gè)具體的對(duì)象了, 這個(gè)對(duì)象就叫做實(shí)例。
b、剛才定義的這個(gè)類體現(xiàn)了面向?qū)ο蟮牡谝粋€(gè)基本特性,封裝,其實(shí)就是使用構(gòu)造方法將內(nèi)容封裝到某個(gè)具體對(duì)象中,然后通過(guò)對(duì)象直接或者self間接獲取被封裝的內(nèi)容。

3、實(shí)例變量與類變量


(1)類變量:存在類的內(nèi)存中,沒(méi)有實(shí)例化即可使用;實(shí)例化后,通過(guò)實(shí)例也可調(diào)用類變量。作用:共用的屬性,節(jié)省開(kāi)銷。

(2)實(shí)例變量:描述某個(gè)具體對(duì)象一些特定的屬性,只能在實(shí)例本身中使用。

(3)區(qū)別:若一個(gè)類中,既有類變量name,又有實(shí)例變量name,則先找實(shí)例變量,實(shí)例變量沒(méi)有的情況下,再找類變量。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

#面向?qū)ο?-CS游戲模擬

class Role(object):
  n = 123   #類變量
  def __init__(self,name,role,weapon,life_value=100,money=15000):
    #構(gòu)造函數(shù)
    #作用:在實(shí)例化時(shí)做一些類的初始化工作
    self.name = name    #實(shí)例變量(靜態(tài)屬性),作用域就是實(shí)例本身
    self.role = role
    self.weapon = weapon
    self.life_value = life_value
    self.money = money

  def shot(self):   #類的方法(功能)--動(dòng)態(tài)屬性
    print("shotting...")

  def got_shot(self):
    print("ah...%s got shot..." %self.name)

  def buy_gun(self,gun_name):
    print("%s just bought %s" %(self.name,gun_name))

#r1是類Role的一個(gè)實(shí)例化對(duì)象
# 實(shí)例化就是以類Role為模板,在內(nèi)存開(kāi)辟一塊空間,存上數(shù)據(jù),賦值成一個(gè)變量名
#實(shí)例化(初始化一個(gè)類,創(chuàng)建了一個(gè)對(duì)象)
r1 = Role("Jack","police","AK-47")  #此時(shí)self相當(dāng)于r1,Role(r1,"Jack","police","AK-47")
r1.buy_gun("B51")    #r1也被稱作Role的一個(gè)實(shí)例

r1.name = "liu"   #修改r1的實(shí)例變量
r1.n = "改變類變量"  #在r1中修改類變量n的值,相當(dāng)于創(chuàng)建一個(gè)n,不會(huì)影響r2
r1.bullet_prove = True   #添加新的屬性,只能在r1中使用
print(r1.n)

r2 = Role("Amy","terrorist","B22") #此時(shí)self相當(dāng)于r2,Role(r2,"Amy","terrorist","B22")
r2.got_shot()
print(r2.n)

Role.n = "abc"   #通過(guò)類名修改類變量的值
print("r1:",r1.n)
print("r2:",r2.n)

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

liu just bought B51
改變類變量
ah...Amy got shot...
123
r1: 改變類變量
r2: abc

4、析構(gòu)函數(shù)        def __del__(self):

作用:在實(shí)例銷毀/釋放時(shí)自動(dòng)執(zhí)行,通常用于做一些收尾工作,如:關(guān)閉一些數(shù)據(jù)庫(kù)鏈接,關(guān)閉打開(kāi)臨時(shí)的文件。

析構(gòu)函數(shù)的調(diào)用順序與構(gòu)造方法的調(diào)用順序相反。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

#面向?qū)ο?-CS游戲模擬

class Role(object):
  n = 123   #類變量
  def __init__(self,name,role,weapon,life_value=100,money=15000):
    #構(gòu)造函數(shù)
    #作用:在實(shí)例化時(shí)做一些類的初始化工作
    self.name = name    #實(shí)例變量(靜態(tài)屬性),作用域就是實(shí)例本身
    self.role = role
    self.weapon = weapon
    self.life_value = life_value
    self.money = money

  def __del__(self):   #析構(gòu)函數(shù)
    print("%s game over..." %self.name)

  def shot(self):   #類的方法(功能)--動(dòng)態(tài)屬性
    print("shotting...")

  def got_shot(self):
    print("ah...%s got shot..." %self.name)

  def buy_gun(self,gun_name):
    print("%s just bought %s" %(self.name,gun_name))

r1 = Role("Jack","police","AK-47")
r1.buy_gun("AK47")
r1.got_shot()

r2 = Role("Amy","terrorist","B22")
r2.got_shot()

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

Jack just bought AK47
ah...Jack got shot...
ah...Amy got shot...
Amy game over...
Jack game over...

5、私有方法、私有屬性(變量)    在變量或者方法前面添加兩個(gè)下劃線 "__",即可變成私有方法、私有屬性

私有屬性只能在類的內(nèi)部,通過(guò)self使用,在類的外部無(wú)法直接訪問(wèn)和修改其內(nèi)容。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

#面向?qū)ο?-CS游戲模擬

class Role(object):
  n = 123   #類變量
  def __init__(self,name,role,weapon,life_value=100,money=15000):
    #構(gòu)造函數(shù)
    #作用:在實(shí)例化時(shí)做一些類的初始化工作
    self.name = name    #實(shí)例變量(靜態(tài)屬性),作用域就是實(shí)例本身
    self.role = role
    self.weapon = weapon
    self.__life_value = life_value   #私有屬性/私有變量
    self.money = money

  def __del__(self):   #析構(gòu)函數(shù)
    print("%s game over..." %self.name)

  def show_status(self):    #私有屬性只能在類的內(nèi)部使用
    print("name:%s weapon:%s life_val:%s" %(self.name,self.weapon,self.__life_value))

  def shot(self):   #類的方法(功能)--動(dòng)態(tài)屬性
    print("shotting...")

  def got_shot(self):
    self.__life_value -= 50
    print("ah...%s got shot..." %self.name)

  def buy_gun(self,gun_name):
    print("%s just bought %s" %(self.name,gun_name))

r1 = Role("Jack","police","AK-47")
r1.buy_gun("AK47")
r1.got_shot()
r1.show_status()

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

Jack just bought AK47
ah...Jack got shot...
name:Jack weapon:AK-47 life_val:50
Jack game over...

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python面向?qū)ο蟪绦蛟O(shè)計(jì)入門與進(jìn)階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門與進(jìn)階經(jīng)典教程

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論