



面向?qū)ο蟪绦蛟O(shè)計
面向過程和面向?qū)ο?/p>
面向過程
分析出問題的解決步驟,解決程序代碼一一實現(xiàn)的過程
程序=數(shù)據(jù)結(jié)構(gòu)+算法
面向?qū)ο?/p>
分析出問題中存在的對象,用代碼定義對象的屬性和行為,從而實現(xiàn)編程目的
程序=對象+行為
類和對象
類
定義:類是一個抽象的概念,它是具有相同屬性和行為的對象的統(tǒng)稱。
類創(chuàng)建格式
class類名(父類名):
#類屬性
屬性名=屬性值
#初始化方法
def_ _ init_ _(self.形參列表):
#實例屬性
delf.實例屬性名=形參
#構(gòu)造方法
def _ _new__(cls,形參列表):
cls.類屬性 = 形參
return 父類.__new__(cls)
#字符串方法
def__str__(self):
return "字符串"
#析構(gòu)方法
def__del__(self):
print("字符串")
#實例方法
del 方法名 (self,形參列表):
方法體
#類方法
@classmethod
def 方法名(cls,形參列表):
方法體
#靜態(tài)方法
@starticmethod
def 方法名(形參列表):
方法體
對象
定義:客觀存在的事務(wù),由事物特征和功能組成
創(chuàng)建對象格式
對象名=類名(實參列表)
對象調(diào)用類的屬性和方法
調(diào)用屬性:對象名.屬性
調(diào)用方法:對象名。方法名(實參列表)
特殊的父類方法
初始化方法__init__(self)
初始化實例屬性,在類對象的創(chuàng)建中會自動調(diào)用,當(dāng)不起重寫父類的初始化方法時,系統(tǒng)會自動調(diào)用無參的初始化方法
構(gòu)造方法__new__(cls)
重新構(gòu)造類實例,通常它用于創(chuàng)造不可變類
1.默認參數(shù)為cls,指向類實例
2.構(gòu)造方法中必須使用return返回父類的構(gòu)造方法
3.構(gòu)造方法中的形參必須與初始化方法中的形參一致
4.當(dāng)對象創(chuàng)建時,先執(zhí)行構(gòu)造函數(shù),然后執(zhí)行初始化方法
字符串方法__str__(self)
當(dāng)使用print()打印對象名時,可以重寫該方法實現(xiàn)不同的輸出內(nèi)容
析構(gòu)方法__del__(self)
用于刪除對象從而釋放該類在內(nèi)存中的空間,在對象定義之后可通過‘del 對象名’的方式刪除該對象,同時自動調(diào)用該方法
類體中方法總類
實例方法
定義
def 實例方法名(self,形參列表):
方法體
方法體中可以通過self。實例屬性名來調(diào)用實例屬性,也可以通過類名.類屬性調(diào)用類屬性
調(diào)用
使用對象名調(diào)用該方法
類方法
定義格式
@classmethod
def 類方法名(cls,形參列表):
方法體
方法體中只能通過cls.類屬性名來調(diào)用,不能調(diào)用實例屬性
調(diào)用
使用對象名和類名調(diào)用該方法
靜態(tài)方法
定義格式
@starticmethod
def 靜態(tài)方法名(形參列表):
方法體
方法體中既不能調(diào)用類屬性也不能調(diào)用實例屬性
調(diào)用
使用對象名和類名調(diào)用該方法
特征
封裝
定義
將類體中的屬性、行為、或行為的細節(jié)隱藏起來的過程
步驟
1.將封裝的屬性或行為私有化
2.生成get和set方法便于外部程序的調(diào)用
特殊變量
全局變量
由大寫字母組成,可以由本類及子類和外部程序調(diào)用
保護變量
由_小寫字母,可以由本類及子類訪問
私有變量
由_ _小寫字母,只能由本類訪問,不能由子類訪問
系統(tǒng)變量
由_ _ 小寫字母_ _ 組成,由系統(tǒng)定義的屬性
繼承
定義
為了實現(xiàn)代碼的拓展功能,可以在類的基礎(chǔ)上定義它的子類,作為子類可以繼承父類的公有屬性和方法,也可以定義子類的屬性和方法
分類
單繼承
class 子類名(父類名):
#初始化方法
def __init__(self,父類的形參,子類的形參):
super() __init__(父類的形參)
多繼承
class 子類名(父類1,父類2,......):
#初始化方法
def__init__(self,父類1形參,父類2形參,子類的形參):
父類1.__init__(self,父類的形參)
父類2.__init__(self,父類的形參)
說明
1.子類可以繼承父類的初始化方法,公有屬性和公有方法,不能繼承私有屬性和私有方法,子類可以定義自己的屬性和方法
2.子類繼承父類的屬性和方法,也可以重寫父類的方法
多態(tài)
定義
當(dāng)子類使用不同實例調(diào)用相同方法時,程序執(zhí)行的結(jié)果相同。
示例
# 類的多態(tài)
# 不同的子類對象,當(dāng)調(diào)用相同的父類方法時產(chǎn)生不同的執(zhí)行效果
class Animal (object):
? ? def __init__(self,name,food):
? ? ? ? self.name = name
? ? ? ? self.food = food
? ? def eat(self):
? ? ? ? print("飼養(yǎng)員給%s喂%s。"%(self.name,self.food))
class Monkey(Animal):
? ? def __init__(self,name,food):
? ? ? ? super().__init__(name,food)
class Horse(Animal):
? ? def __init__(self,name,food):
? ? ? ? super().__init__(name,food)
class Rabbit(Animal):
? ? def __init__(self,name,food):
? ? ? ? super().__init__(name,food)
# 飼養(yǎng)員類
class Breeder(object):
? ? def feedAnimal(self,n):? ? # n表示的是不同動物對象
? ? ? ? n.eat()
# 創(chuàng)建對象
bd = Breeder()
hz = Monkey("猴子","香蕉")
ma = Horse("馬","甘草")
tz = Rabbit("兔子","蘿卜")
bd.feedAnimal(hz)
bd.feedAnimal(ma)
bd.feedAnimal(tz)
# 飼養(yǎng)員類
class Breeder(object):
? ? def feedAnimal(self,n):? ? # n表示的是不同動物對象
? ? ? ? n.eat()
說明:多態(tài)的體現(xiàn),當(dāng)n傳入不同的對象名時,n調(diào)用相同方法eat()產(chǎn)生的程序結(jié)果不同