1. 程式人生 > >python初識面向物件

python初識面向物件

面向物件程式設計:

物件的概念:

面向物件的思想就是,將世界中的實體以單位計算,抽象為物件,物件具有屬性和行為能力,屬性是物件的所有屬性值
行為物件在持有值進行的操作。

類的概念:

描述物件的資料型別,刻畫具有一組具有共同特性的物件

面向物件的好處:

使得程式碼之間的角色關係更加明確
解決了程式的可擴充套件性。對某一個物件單獨修改,會立刻反映到整個體系中,如對遊戲中一個人物引數的特徵和技能修改都很容易。
規範了物件的屬性和技能
缺點:
可控性差,無法向面向過程的程式設計流水線式的可以很精準的預測問題的處理流程與結果,
面向物件的程式一旦開始就由物件之間的互動解決問題,即便是上帝也無法預測最終結果。
於是我們經常看到一個遊戲人某一引數的修改極有可能導致陰霸的技能出現,一刀砍死3個人,這個遊戲就失去平衡。
不過,在python中面向物件的程式設計並不是全部

面向物件的一些名詞

類,物件,例項,例項化

類:某一類具有相同特徵的一類事物

物件、例項:具體的某一個事物

例項化,由類到物件的這個過程

Python中的所有都是類
在Python中,一切皆物件,型別的本質就是類。

dict #型別dict就是類dict
<class 'dict'>
 d=dict(name='luck') #例項化
 d.pop('name') #向d發一條訊息,執行d的方法pop

在python中,用變量表示特徵,用函式表示技能,因而具有相同特徵和技能的一類事物就是‘類’,物件是則是這一類事物中具體的一個。

宣告函式

def  函式名(引數):
       函式文件字串
       函式體

宣告類

class 類名:
    '類的文件字串'
    類體
    #建立一個類
class Person:
    pass
  類裡面會有函式(功能)

class Person: #定義一個人類
role = ‘person’ #人的角色屬性都是人
def walk(self): #人都可以走路,也就是有一個走路方法,也叫動態屬性
print(“person is walking…”)

類有兩種作用:屬性引用和例項化
屬性引用(類名.屬性)

class Person:   #定義一個人類
    role = 'person'  #人的角色屬性都是人
    def walk(self):  #人都可以走路,也就是有一個走路方法
        print("person is walking...")
print(Person.role)  #檢視人的role屬性
print(Person.walk)  #引用人的走路方法,注意,這裡不是在呼叫

例項化

類名加括號就是例項化,會自動觸發__init__函式的執行,可以用它來為每個例項定製自己的特徵

class Person: #定義一個人類
role = ‘person’ #人的角色屬性都是人
def init(self,name):
self.name = name # 每一個角色都有自己的暱稱;當我們在進行例項化時,就會先觸發該方法。

  def walk(self):  #人都可以走路,也就是有一個走路方法
        print("person is walking...")
print(Person.role)  #檢視人的role屬性
print(Person.walk)  #引用人的走路方法,注意,這裡不是在呼叫

例項化就是由類到物件的一個過程

g = Person(‘egon’) #類名()就等於在執行Person.init()
#執行完__init__()就會返回一個物件。這個物件類似一個字典,存著屬於這個人本身的一些屬性和方法。
檢視屬性&呼叫方法

print(g.name)     #檢視屬性直接 物件名.屬性名
print(g.walk())   #呼叫方法,物件名.方法名()  

關於self

self:在例項化時自動將物件/例項本身傳給__init__的第一個引數,你也可以給他起個別的名字,但是建議不要這麼做。

類屬性

一、檢視定義的類的屬性存在哪裡,有兩種檢視方式
dir(類名):查出是一個名字列表
類名.dict:查處的是一個子彈,key位數姓名,value為屬性值

二:特殊的類屬性
類名.name#類的名字
類名.doc 類的文件字串
類名.base 類的第一個父類
類名.bases 類的所有父類構成的元組
類名.dict 類的字典屬性
類名.module 類定義所在模組
類名.class 例項對應的類

定義及呼叫的固定格式

class 類名:
    def __init__(self,引數1,引數2):
        self.物件的屬性1 = 引數1
        self.物件的屬性2 = 引數2

    def 方法名(self):pass

    def 方法名2(self):pass

物件名 = 類名(1,2)  #物件就是例項,代表一個具體的東西
                  #類名() : 類名+括號就是例項化一個類,相當於呼叫了__init__方法
                  #括號裡傳引數,引數不需要傳self,其他與init中的形參一一對應
                  #結果返回一個物件
物件名.物件的屬性1   #檢視物件的屬性,直接用 物件名.屬性名 即可
物件名.方法名()     #呼叫類中的方法,直接用 物件名.方法名() 即可