溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python3.5中面向?qū)ο缶幊痰氖纠治?/h1>
發(fā)布時間:2021-07-16 09:48:02 來源:億速云 閱讀:159 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)Python3.5中面向?qū)ο缶幊痰氖纠治龅膬?nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

具體如下:

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

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

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

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

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

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

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

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

面向?qū)ο缶幊淌抢谩邦悺焙汀皩ο蟆眮韯?chuàng)建各種模型來實現(xiàn)對真實世界的描述。

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

核心的特征:世界萬物皆對象,世界萬物皆可分類。

a、類(class)

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

b、對象(object)

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

一個類可以實例化多個對象,每個對象可以有不同的屬性。人類是指使用的人,每個人是指具體的對象。

c、封裝(encapsulation)

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

d、繼承(Inheritance)

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

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

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

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

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

把一系列具體事物的共同點抽象出來, 再通過這個抽象的事物, 與不同的具體事物進(jìn)行對話。

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

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

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

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

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

(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")  #實例化(初始化一個類,創(chuàng)建了一個對象)
r1.buy_gun("B51")

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

運行結(jié)果:

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

注:

a、類的基本定義

Python3.5中面向?qū)ο缶幊痰氖纠治?><br/></p><p>第一句:定義一個類,class是定義類的語法,Role是類名,(object)是新式類的寫法,必須這樣寫;</p><p>第二句:<code>__init__()</code>叫做初始化方法,也叫構(gòu)造方法(雖然它是函數(shù)的形式,但在類中就不叫函數(shù)了,叫做方法),在類被調(diào)用時這個方法會自動執(zhí)行,進(jìn)行一些初始化動作,</p><p>所以__init__(self,name,role,weapon,life_value=100,money=15000)就是要在創(chuàng)建一個角色時給它設(shè)置這些屬性。</p><p>b、實例化:把一個類變成一個具體的對象的過程叫實例化。</p><p><img src=#!/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ù)     #作用:在實例化時做一些類的初始化工作     self.name = name    #實例變量(靜態(tài)屬性),作用域就是實例本身     self.role = role     self.weapon = weapon     self.life_value = life_value     self.money = money   def shot(self):   #類的方法(功能)--動態(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的一個實例化對象 # 實例化就是以類Role為模板,在內(nèi)存開辟一塊空間,存上數(shù)據(jù),賦值成一個變量名 #實例化(初始化一個類,創(chuàng)建了一個對象) r1 = Role("Jack","police","AK-47")  #此時self相當(dāng)于r1,Role(r1,"Jack","police","AK-47") r1.buy_gun("B51")    #r1也被稱作Role的一個實例 r1.name = "liu"   #修改r1的實例變量 r1.n = "改變類變量"  #在r1中修改類變量n的值,相當(dāng)于創(chuàng)建一個n,不會影響r2 r1.bullet_prove = True   #添加新的屬性,只能在r1中使用 print(r1.n) r2 = Role("Amy","terrorist","B22") #此時self相當(dāng)于r2,Role(r2,"Amy","terrorist","B22") r2.got_shot() print(r2.n) Role.n = "abc"   #通過類名修改類變量的值 print("r1:",r1.n) print("r2:",r2.n)

運行結(jié)果:

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

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

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

析構(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ù)
    #作用:在實例化時做一些類的初始化工作
    self.name = name    #實例變量(靜態(tài)屬性),作用域就是實例本身
    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):   #類的方法(功能)--動態(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()

運行結(jié)果:

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

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

私有屬性只能在類的內(nèi)部,通過self使用,在類的外部無法直接訪問和修改其內(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ù)
    #作用:在實例化時做一些類的初始化工作
    self.name = name    #實例變量(靜態(tài)屬性),作用域就是實例本身
    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):   #類的方法(功能)--動態(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()

運行結(jié)果:

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

感謝各位的閱讀!關(guān)于“Python3.5中面向?qū)ο缶幊痰氖纠治觥边@篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)
AI