python - 初識面向對象

一、初識面向對象
 
    面向過程:一切以事務的發展流程爲中心
 
        優勢:負責的問題流程化,編寫相對簡單
        缺點:可擴展性差,只能解決一個問題,改造也會很困難,牽一髮而動全身。
 
    面向對象:一切以對象爲中心,一切皆爲對象,具體的某一個事務就是對象。
                    咱們面向的再也不是事務發展的流程,而是操做某一個事務的個體
 
        優勢:可擴展性強,對某一個對象單獨修改會馬上反映到整個體系中。對屬性和動做修改都很容易
        缺點:編程的複雜度高於面向過程,可控性差。沒法像面向過程的程序設計流水線式能夠很精準的預測問題的處理流程和結果。
 
面向對象的應用場景:需求常常變化的軟件,通常需求都集中在用戶層,互聯網應用,企業內部軟件,遊戲等。
 
二、類,對象
 
        類是建立對象的第一步,對象就是經過類來創造的具體的東西。
 
類與對象的關係:類是對事務的總結,抽象的概念,類用來描述對象,對象是類的實例化的結果,對象能執行那些方法都由類來決定,類中定義了什麼,對象就擁有什麼。
__init__(self,參數)  參數通常做爲屬性設置給對象,對象就是self,對象性的封裝。

def 方法(self,參數):  方法,第一個參數通常是固定的self,當前類的對象

 

建立類: python

class 類名:

    def __init__(self):  # 初始化方法,又被稱爲構造方法
         self.屬性 = 值
           self.屬性 = 值
           self.屬性 =def  fangfa(self):
            方法體(函數體,return

建立對象:編程

     變量 = 類名()  #實例化  <--> 建立

      變量.屬性  # 訪問對象的屬性信息

      變量.方法()  # 訪問類中的方法

下面以造車來舉例: ide

class Car:  # 類名首字母大寫,嚴格遵照駝峯命名規則
    pass

# 造車
c = Car()    #類名() 表示建立對象
c.color = 'red' # 對象.屬性   中間的點表示‘的’  ,當屬性不存在的時候,至關於添加一個屬性
c.paizhao = '京A888888'
print(c.color)
print(c.paizhao)

c.color = 'blue'  # 當屬性存在的時候,是修改屬性星系
# 至關於一個字典,屬性爲key,等號後邊的內容爲value
View Code
class User:

    def __init__(self,username,password):
        self.username = username
        self.password = password

    def login(self):
        uname = input('請輸入用戶名:')
        passw = input('請輸入密碼')

        if uname == self.username and passw == self.password:
            print('登錄成功')
        else:
            print('登錄失敗')

info = User('zhangmeng','ni123')
info.login()
View Code

用面向對象的思惟完成用戶登陸 函數

class User:

    def __init__(self,username,password):
        self.username = username
        self.password = password

    def login(self):
        uname = input('請輸入用戶名:')
        passw = input('請輸入密碼')

        if uname == self.username and passw == self.password:
            print('登錄成功')
        else:
            print('登錄失敗')

info = User('zhangmeng','ni123')
info.login()
View Code
三、面向對象 和麪向過程的比對
 
 一、函數式:函數側重的是功能,將功能封裝到函數中,調用方便
 二、面向對象編程:對象側重的是歸類;對整個系統進行分析,分析出須要哪些對象,而後給對象進行分類
先寫類,而後使用類建立對象,最後用對象去執行相關操做。
 
 
python同時支持面向對象和麪向過程:
    若是寫一些比較小的程序用面向對象,程序很複雜,很龐大,建議用面向過程
 
四、面向對象的三大特徵
 
    封裝
 
        把不少數據封裝到一個對象中,把固定功能的代碼封裝到一個代碼塊,函數。對象,打包成模塊
 
        一、對屬性的封裝(__init__())
                 self.xxx = xxx
         二、對方法和功能的封裝
class Student:
    def __init__(self,name,ID,grade):
        self.name = name
        self.ID = ID
        self.grade = grade

stu1 = Student('張欣','001','三年級')  # 把多個信息(值)保存在一個對象中
stu2 = Student('黃瑤','009','六年級')


def choose(s):
    print('選擇%s去參加競賽'%s.name)

choose(stu1)
 
繼承
 
        子類自動擁有父類中除了私有屬性外的其餘全部內容,對父類進行擴展。
        父類的對象不能執行子類中的功能
 
        當出現x是一種y的時候,推薦使用繼承關係
 
        python支持多繼承,查找順序:先找離它近的
class foo:
    def getmoney(self):
        print('快到碗裏來')

class bar(foo):
    pass

c = bar()
c.getmoney()
# 快到碗裏來
多態
 
        同一個對象,多種形態。
 
        好處:程序具備超高的可擴展性,面向對象思想的核心與靈魂,python自帶多態。
# 封裝,繼承,多態

class Animal:
    def run(self):
        print('動物在跑')

    def chi(self):
        print('動物在吃')

class Cat(Animal):

    def __init__(self,name,color,hobby):
        self.name = name
        self.color = color
        self.hobby = hobby

class Dog(Animal):
    def __init__(self,name,color,hobby):
        self.name = name
        self.color = color
        self.hobby = hobby

    def chi(self):
        print('吃吃吃')

c = Cat('xiaomei','紅色','偷吃魚')
d = Dog('budian','黑色','咬東西')

def func(ani):
    ani.chi()

func(c)
func(d)

相關文章
相關標籤/搜索