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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python基础——面向对象的程序设计

發(fā)布時(shí)間:2024/7/19 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python基础——面向对象的程序设计 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

python基礎(chǔ)——面向?qū)ο蟮某绦蛟O(shè)計(jì)

?

1 什么是面向?qū)ο蟮某绦蛟O(shè)計(jì)

?

面向過程的程序設(shè)計(jì)的核心是過程,過程即解決問題的步驟,面向過程的設(shè)計(jì)就好比精心設(shè)計(jì)好一條流水線,考慮周全什么時(shí)候處理什么東西。

?

優(yōu)點(diǎn)是:極大的降低了程序的復(fù)雜度

?

缺點(diǎn)是:一套流水線或者流程就是用來解決一個(gè)問題,生產(chǎn)汽水的流水線無法生產(chǎn)汽車,即便是能,也得是大改,改一個(gè)組件,牽一發(fā)而動(dòng)全身。

?

應(yīng)用場景:一旦完成基本很少改變的場景,著名的例子有Linux內(nèi)核,git,以及Apache HTTP Server等

?

?

?

面向?qū)ο蟮某绦蛟O(shè)計(jì)的核心是對(duì)象。對(duì)象(object)基本上可以看做數(shù)據(jù)(特性)以及由一系列可以存取、操作這些數(shù)據(jù)的方法所組成的集合。

?

優(yōu)點(diǎn)是:解決了程序的擴(kuò)展性。對(duì)某一個(gè)對(duì)象單獨(dú)修改,會(huì)立刻反應(yīng)到整體體系中,如對(duì)游戲中一個(gè)人物參數(shù)的特征和技能修改都很容易。

?

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

?

應(yīng)用場景:需求經(jīng)常變化的軟件,一般需求的變化都集中在用戶層,互聯(lián)網(wǎng)應(yīng)用,企業(yè)內(nèi)部軟件,游戲等都是面向?qū)ο蟮某绦蛟O(shè)計(jì)大顯身手的好地方。

?

?面向?qū)ο蟮某绦蛟O(shè)計(jì)并不是全部。對(duì)于一個(gè)軟件質(zhì)量來說,面向?qū)ο蟮某绦蛟O(shè)計(jì)知識(shí)用來解決擴(kuò)展性。

?

?

2 類和對(duì)象

?

對(duì)象(object)基本上可以看做數(shù)據(jù)(特性)以及由一系列可以存取、操作這些數(shù)據(jù)的方法所組成的集合。

?

,可以看成種類,類型,從一組對(duì)象中提取到的相似部分。所有的對(duì)象都屬于一個(gè)類,稱為類的實(shí)例。

?

之前學(xué)習(xí)的數(shù)據(jù)類型就是類

print(int) print(Garen)

輸出結(jié)果:

<class 'int'> <class '__main__.Garen'>

  

3 類  

3.1 初始類

?

1 聲明類 (和聲明函數(shù)很相似)

類的定義格式 class 類名:'類的文檔字符串'類體

2 創(chuàng)建一個(gè)類:

class Data:pass

*Python編程中習(xí)慣類名使用單數(shù)單詞并且首字母大寫

?

類是數(shù)據(jù)與函數(shù)的結(jié)合,二者稱為類的屬性

class Garen: #定義英雄蓋倫的類,不同的玩家可以用它實(shí)例出自己英雄;camp='Demacia' #所有玩家的英雄(蓋倫)的陣營都是Demacia;def attack(self,enemy): #普通攻擊技能,enemy是敵人;enemy.life_value-=self.aggressivity #根據(jù)自己的攻擊力,攻擊敵人就減掉敵人的生命值。

  

3.2 類的作用1:屬性引用

屬性引用(類名.屬性)

(1)引用類的數(shù)據(jù)屬性(類名.變量名)

print(Garen.camp) # 引用類的數(shù)據(jù)屬性,該屬性與所有對(duì)象/實(shí)例共享

輸出結(jié)果為:

Demacia

  

(2)引用類的函數(shù)屬性(類名.函數(shù)名)

print(Garen.attack) #引用類的函數(shù)屬性,該屬性也共享

輸出結(jié)果為:

<function Garen.attack at 0x00000059CE8FAF28>

?

(3)類的屬性操作

Garen.name='Garen1' #增加屬性 print(Garen.name) #查詢屬性

輸出結(jié)果為:

Garen1

?

del Garen.name #刪除屬性print(Garen.name)

輸出結(jié)果為:

AttributeError: type object 'Garen' has no attribute 'name' #報(bào)錯(cuò)

  

Garen.camp="aaaa" #修改屬性 print(Garen.camp)

輸出結(jié)果為:

aaaa

  

3.3 類的作用2:實(shí)例化 

(1)__init__實(shí)例化

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

class Garen:camp='Demacia'def __init__(self,nickname,aggressivity=58,life_value=455):self.nickname=nickname #為自己的蓋倫起個(gè)別名;self.aggressivity=aggressivity #英雄都有自己的攻擊力;self.life_value=life_value #英雄都有自己的生命值;def attack(self,enemy):print("attack %s" % enemy)

實(shí)例化:類名+括號(hào)

g1=Garen('草叢倫')

#就是在執(zhí)行Garen.__int__(g1,’草叢倫’),然后執(zhí)行__init__內(nèi)的代碼g1.nickname=’草叢倫’等

  

(2)self作用

self的作用是在實(shí)例化時(shí)自動(dòng)將對(duì)象/實(shí)例本身傳給__init__的第一個(gè)參數(shù),self可以是任意名字,但是self是大家公認(rèn)的。

?這種自動(dòng)傳遞的機(jī)制還體現(xiàn)在g1.attack的調(diào)用上,后續(xù)會(huì)介紹

?

一:我們定義的類的屬性到底存到哪里了?有兩種方式查看

dir(類名):查出的是一個(gè)名字列表

類名.__dict__:查出的是一個(gè)字典,key為屬性名,value為屬性值

?

?二:特殊的類屬性

類名.__name__# 類的名字(字符串)

類名.__doc__# 類的文檔字符串

類名.__base__# 類的第一個(gè)父類(在講繼承時(shí)會(huì)講)

類名.__bases__# 類所有父類構(gòu)成的元組(在講繼承時(shí)會(huì)講)

類名.__dict__# 類的字典屬性

類名.__module__# 類定義所在的模塊

類名.__class__# 實(shí)例對(duì)應(yīng)的類(僅新式類中)

  

4 對(duì)象(實(shí)例) 

對(duì)象是關(guān)于類而實(shí)際存在的一個(gè)例子,即實(shí)例

#類實(shí)例化得到g1這個(gè)實(shí)例

class Garen:camp='Demacia'def __init__(self,nickname,aggressivity=58,life_value=455):self.nickname=nickname #為自己的蓋倫起個(gè)別名;self.aggressivity=aggressivity #英雄都有自己的攻擊力;self.life_value=life_value #英雄都有自己的生命值;def attack(self,enemy):print("attack %s" % enemy)g1=Garen('草叢倫')

  

4.1 對(duì)象的屬性引用和綁定方法  

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

格式: 實(shí)例名.類的變量名

?????? 實(shí)例名.綁定方法

?????? 實(shí)例名.實(shí)例自己的變量名

print(g1.nickname) print(g1.aggressivity) print(g1.life_value)

輸出結(jié)果為:

草叢倫 58 455

?

(2)對(duì)象的屬性操作

查看屬性信息

print(g1.nickname)

輸出結(jié)果:

草叢倫

  

修改屬性信息

g1.nickname="倫哥" print(g1.nickname)

輸出結(jié)果為:

倫哥

  

添加屬性

g1.sex="female" print(g1.sex)

輸出結(jié)果為:

Female

 

刪除屬性

del g1.sex print(g1.sex)

輸出結(jié)果為:

AttributeError: 'Garen' object has no attribute 'sex' #報(bào)錯(cuò)

  

(3)查看實(shí)例屬性

同樣是dir和內(nèi)置__dict__兩種方式

特殊實(shí)例屬性

__class__

__dict__

 

(4)對(duì)象(實(shí)例)的綁定方法

對(duì)象本身只有數(shù)據(jù)屬性,但是python的class機(jī)制會(huì)將類的函數(shù)綁定到對(duì)象上,稱為對(duì)象的方法,或者叫綁定方法。

print(g1.attack) #對(duì)象的綁定方法 print(Garen.attack) #對(duì)象的綁定方法attack本質(zhì)就是調(diào)用類的函數(shù)attack的功能,二者是一種綁定關(guān)系

輸出結(jié)果為:

<bound method Garen.attack of <__main__.Garen object at 0x00000017370815F8>> <function Garen.attack at 0x0000001737085048>

對(duì)象的綁定方法的特別之處在于:obj.func()會(huì)把obj傳給func的第一個(gè)參數(shù)

  

4.2 對(duì)象的交互  

仿照Garen類創(chuàng)建一個(gè)Riven類:

實(shí)例Riven類

交互:瑞雯攻擊草叢倫

class Riven:camp='Noxus'def __init__(self,nickname,aggressivity=54,life_value=414):self.nickname=nickname #為自己的瑞雯起個(gè)別名;self.aggressivity=aggressivity #英雄都有自己的攻擊力;self.life_value=life_value #英雄都有自己的生命值;def attack(self,enemy):print("attack %s" % enemy)enemy.life_value -= self.aggressivityg1=Garen('草叢倫') r1=Riven('瑞雯') print(g1.life_value) r1.attack(g1) print(g1.life_value)

輸出結(jié)果為:

455 瑞雯 attack 草叢倫 401

?

轉(zhuǎn)載于:https://www.cnblogs.com/niejinmei/p/6761854.html

總結(jié)

以上是生活随笔為你收集整理的python基础——面向对象的程序设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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