2.1.0 Python初識面向?qū)ο?/h2>

點(diǎn)擊跳轉(zhuǎn)筆記總目錄

一、面向過程:

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

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

==缺點(diǎn):== 一套流水線或者流程就是用來解決一個問題,如果修改代碼就都得改變

二、面向?qū)ο螅荷系鄣乃枷?/h2>

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

==缺點(diǎn):== 可控性差,無法向面向過程的程序設(shè)計(jì)流水線式的可以很精準(zhǔn)的預(yù)測問題的處理流程與結(jié)果,面向?qū)ο蟮某绦蛞坏╅_始就由對象之間的交互解決問題,即便是上帝也無法預(yù)測最終結(jié)果。于是我們經(jīng)??吹揭粋€游戲人某一參數(shù)的修改極有可能導(dǎo)致陰霸的技能出現(xiàn),一刀砍死3個人,這個游戲就失去平衡。

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

對象/實(shí)例:具體的某一事物

實(shí)例化:類到對象的過程(實(shí)例=類名(參數(shù)1,參數(shù)2))

四、初始類和對象

類的定義:

class  Person:   #class  類名:
    #注意類名后面不要括號 
    類體

在python中,用變量表示特征,用函數(shù)表示技能,因而具有相同的特征和技能的一類事物就是‘類’,
對象則是這一類事物中具體的一個
==類的兩種作用:== 屬性引用和實(shí)例化
屬性引用:

class Person:
    role = '中國人'  #類屬性----靜態(tài)屬性
    def walk(self):  #這里的函數(shù)叫做方法-----動態(tài)屬性
        #注意:self必須寫
        print('person is walking ...')
print(Person.role) #查看類屬性
print(Person.walk) #查看類方法 , 用類名去調(diào)用方法名,打印出來的是內(nèi)存地址

實(shí)例化:

class Person:
    role = '中國人'
    def __init__(self,name,sex):
        self.name=name
        self.sex=sex
    def walk(self):
        print('person is walking')

p= Person('腿姐',21) #實(shí)例化:類名(參數(shù)1,參數(shù)2)  類名()就等于在執(zhí)行Person.__init__()
print(p.name)  #直接查看屬性   對象名.屬性名
print(p) #返回的是一個對象
p.walk()  #調(diào)用方法  ,對象名.方法()

==對象的兩種作用:查看屬性和調(diào)用方法(咋上面的實(shí)例化中講到)==

五、關(guān)于self

self:在實(shí)例化時自動將對象/實(shí)例本身傳給init的第一個參數(shù),你也可以給它起個別的名字,但是一般正常人都不會這么做,因?yàn)槟愀牧藙e人就不認(rèn)識了。

注意:def init(self): 這句話可以寫也可以不寫,只要有參數(shù)參進(jìn)來的時候就必須得寫

class Person:
    def  eat(self):
        #這里的self必須得寫
        pass

六、特殊的類屬性

class Person:
    role = '中國人'
    def __init__(self,name,sex):
        self.name=name
        self.sex=sex
    def walk(self):
        print('person is walking')

p= Person('腿姐',21) #實(shí)例化一個對象
print(Person.__name__,type(Person.__name__)) #查看類的名字(這里的類名是字符串類型的)
print(Person.__dict__) #查出的是一個字典,key為屬性名,value為屬性值
print(Person.__doc__)## 就是把注釋顯示出來
print(dir(Person)) #查看類的方法,以列表的形式顯示出來
print(Person.__module__) #類定義所在的模塊
print(Person.__class__)
print(isinstance(p,Person))#判斷對象 是否是類的實(shí)例

七、對象的相關(guān)知識

1.對象是關(guān)于類而實(shí)際存在的一個例子,即實(shí)例
2.對象/實(shí)例只有一種作用:屬性引用

egg = Person('egon',10,1000)
print(egg.name)
print(egg.aggressivity)
print(egg.life_value)  #當(dāng)然,你也可以引用一個方法,因?yàn)榉椒ㄒ彩且粋€屬性。

八、面向?qū)ο笮〗Y(jié)

定義及調(diào)用的固定格式

class 類名:
    def __init__(self,參數(shù)1,參數(shù)2):
        self.對象的屬性1 = 參數(shù)1
        self.對象的屬性2 = 參數(shù)2

    def 方法名(self):
        pass
    def 方法名2(self):
        pass

九、對象之間的交互

人狗大戰(zhàn)小程序

class Person:
    def __init__(self,name,aggr,life_value):
        self.name=name
        self.aggr=aggr
        self.life_value=life_value
    def attack(self,dog): #人可以攻擊狗
        dog.life_value=dog.life_value-self.aggr
class Dog:
    def __init__(self,name,aggr,life_value):
        self.name = name
        self.aggr = aggr
        self.life_value = life_value

    def attack(self,egg): #狗也可以攻擊人
        egg.life_value = egg.life_value - self.aggr
egg = Person('egon',250,1000)  #示例化一個人呢
dog = Dog('樂樂',50,2000)  #實(shí)例化一個狗
print('狗沒攻擊前egon的生命值:',dog.life_value)  #沒攻擊前egon的生命值
egg.attack(dog)   #讓egon去攻擊狗樂樂
print('狗攻擊后egon的生命值:',dog.life_value)  #攻擊后egon的生命值

print('egon沒攻擊前狗的生命值:',egg.life_value)  #沒攻擊前egon的生命值
dog.attack(egg)   #讓狗去攻擊egon
print('egon攻擊后狗的生命值:',egg.life_value)  #攻擊后egon的生命值

十、類命名空間與對象,實(shí)例的命名空間

創(chuàng)建一個類就會創(chuàng)建一個類的名稱空間,用來存儲類中定義的所有名字,這些名字成為類的屬性
而類有兩種屬性:靜態(tài)屬性和動態(tài)屬性

  • 靜態(tài)屬性就是直接在類中定義的變量
  • 動態(tài)屬性就是定義在類中的方法
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容