day14- 面向對象基礎(一)

今天開始寫關於面向對象的內容,面向對象是編程思想中一大思想,因爲平常使用中常常會用到,本次主要是對於我我的認爲重點的基礎知識進行整理,不會特別詳細的書寫。編程

1.面向過程與面向對象的區別函數

2.類spa

3.類的屬性以及操做方式3d

4.對象指針

5.對象的屬性以及操做方法code

6.類的名稱空間以及對象空間對象

 

開始今日份整理blog

 

1.面向過程與面向對象的區別遊戲

  1.1面向過程:核心是過程二字,過程指的是解決問題的步驟,設定一條流水線,機械式的思考問題圖片

  • 優勢:複雜的問題流程化,進而簡單化
  • 缺點:可擴展性差
  • 應用換將:應用內容變化較少,流程化做業較多,例如數據分析等

  1.2面向對象:核心是對象二字,對象的特徵就是特徵與技能的結合體

  • 優勢:可擴展性強,
  • 缺點:編程複雜度高
  • 應用環境:用戶需求常常變更,互聯網應用,遊戲,企業內部應用

2.類

  2.1類的定義:一系列對象類似的技能和技能的結合體;強調:站在不一樣的角度,獲得的分類是不一致的;對象是類的具體表現

  現實中類與對象

  貓,是一類,你家的大橘是一個具體的對象

  狗,是一類,你家的大黃是一個具體的對象

  男神,是一類,你最喜歡的老公是一個具體的對象

  在現實中,先有對象,纔會找到共同的特徵,歸爲一類

  在編程中,先有類,纔會根據類建立對象,恰好相反

  2.2類的結構

##########

class 類名()#類名要首字母大寫

    變量

    函數(方法)

##########

3.類的屬性以及操做方式

類的屬性主要分倆種

  • 靜態屬性:類內部定義的變量稱之爲數據屬性
  • 動態屬性:類內部定義的函數稱之爲函數屬性

靜態屬性的查詢

    # 第一種,類名.__dict__方式:查看類中全部內容時用。
    # 查:
print(Human.__dict__)
print(Human.__dict__['mind'])
Human.__dict__['mind'] = '無腦'
print(Human.__dict__)
    # 第二種  萬能的. 能夠增刪改查類中的靜態屬性。
print(Human.mind)  # 查
Human.mind = '無腦'  # 改
print(Human.mind)
del Human.mind  # 刪
Human.walk = '直立行走'
print(Human.walk)

類內方法的調用

# 類名操做類中的方法(除去特殊方法:靜態方法,類方法以外,通常不會經過類名執行類中的方法)。
    # 類名.方法名(參數)
Human.work(111)
Human.tools(111)
#下面能夠作,但不用。
Human.__dict__['work'](111)

4.對象

  4.1對象的定義:對象是特徵與技能的結合體,只要類名加()就能夠生成一個對象

  4.2實例化一個對象的過程

  • 執行類中本身的__new__方法,產生一個空的對象空間
  • 自動執行類中的__init__方法而且將這個空的對象空間傳給self
  • 在__init__中經過self給這個空間添加屬性

5.對象的屬性以及操做方法

對象操做對象空間中的屬性

obj = Human('小胖','',20,'')
    #1,obj.__dict__ 查詢對象中全部的屬性
print(obj.__dict__)
    #2, 經過萬能的.的方式操做對象中的單個屬性。
obj.job = 'IT'  # 增
del obj.n  # 刪
obj.s = '' # 改
print(obj.s)
print(obj.__dict__)
    # 3,對象能夠查詢類中的屬性。
print(obj.mind)
print(obj.language)
obj.a = 666
print(obj.a)
    # 4,對象能夠執行類中的方法。
    # 對象執行類中的全部方法(除去3個特殊方法)Python解釋器都會將對象空間主動傳給方法的第一個參數self、
print(obj)
obj.work()

TIM圖片20190118164845

類中的方法的第一個參數約定俗成寫self,便於統一,生成多個對象只須要屢次調用類名加()加屬性就能夠生成

6.類的名稱空間以及對象空間

class Gamerole(object):

    name = 'LOL'
    year = 2012
    def __init__(self,name,ad,hp):
        self.name = name
        self.ad = ad
        self.hp = hp
    def attack(self,p1):
        # Gamerole.area = '德瑪西亞'
        p1.hp -= self.ad
        print('%s攻擊%s,%s掉了%s血,還剩%s血'
              %(self.name,p1.name,p1.name,self.ad,p1.hp))

# gailun = Gamerole('草叢倫',10,200)
# gailun.armor = 90
# print(gailun.__dict__)
# 對象的屬性:不只在__init__裏面添加,還能夠在其餘方法或者類外面添加。
# yasuo = Gamerole('託兒所',20,50)
# yasuo.attack(gailun)
# 類的屬性:不只在類內部能夠添加,還能夠在類外部添加。
# Gamerole.year = 6
# print(Gamerole.__dict__)
gailun = Gamerole('草叢倫',10,200)
timo = Gamerole('提莫',30,60)
print(gailun.name)
print(gailun.year)
# 對象空間中存在一個類對象指針,因此對象能夠找到類中的變量以及方法
# 類名只能找到類中的變量,方法,或者(父類中的),不能找對象中的屬性。

TIM圖片20190118164902

TIM圖片20190118164927

類中的函數屬性:是綁定對象,綁定不一樣的對象是不一樣的綁定方法,對象調用綁定方法時,會把對象自己當作第一個參數傳給   self,類中的函數是給對象來使用,誰來誰使用。若是類訪問本身的屬性時,會先從本身的名稱空間訪問,沒有則會去本身的父類去查找,若是沒有則不會從全局變量中查找,只會在類的空間中查找。 

相關文章
相關標籤/搜索