小編給大家分享一下python面向?qū)ο笥惺裁刺卣?,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
在哈密等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),全網(wǎng)整合營(yíng)銷推廣,外貿(mào)網(wǎng)站建設(shè),哈密網(wǎng)站建設(shè)費(fèi)用合理。封裝、繼承、多態(tài)。
1、封裝
是指在面向?qū)ο缶幊痰乃枷胫校瑢?duì)代碼進(jìn)行高度的封裝,封裝又叫包裝。封裝在編程中的核心作用:整體化代碼,便于攜帶,提高數(shù)據(jù)或算法的安全性
封裝的體現(xiàn)
# 求出1-200之間的素?cái)?shù) def getnum(): s = [i for i in range(1, 201)] def fun(x): for i in range(2, x): if x % i == 0: return False else: return True num = filter(fun, s) return num print(list(getnum()))
2、繼承
在程序中繼承是指描述的是多個(gè)類之間的一個(gè)所屬關(guān)系。例如一個(gè)類A里面的所有的屬性和方法可以復(fù)用,這個(gè)時(shí)候可以通過(guò)繼承的方式,傳遞到類B里面,這這里A類稱之為父類(基類) B類稱之為子類(派生類)。
在Python中子類(派生類)會(huì)繼承父類(基類),那么子類就及繼承了父類中的屬性和方法,簡(jiǎn)化了子類的設(shè)計(jì)問(wèn)題,便于后期的維護(hù)和升級(jí)
3、單繼承
一個(gè)類只繼承了一個(gè)父類。
如果子類繼承了父類,子類就繼承了父類的屬性和方法。
class A(object): pass class B(A) pass # B是子類,A是父類,B繼承A class A(object): def __init__(self): self.money = 1000000 self.blood = "A" def work(self): print("我是一名工程師") class B(A): pass b = B() print(b.money) print(b.blood) b.work() #輸出結(jié)果 #1000000 #A #我是一名工程師
4、多繼承
一個(gè)類繼承了多個(gè)父類
子類繼承了多個(gè)父類,則子類就會(huì)繼承父類的所有的不同名的方法
class A(object): pass class B(object) pass class C(A,B): pass #子類C繼承了A,B兩個(gè)父類 class Tang(object): def __init__(self): self.jn1="念經(jīng)" def dyj(self): print("我能打妖精") class Puti(object): def __init__(self): self.jn2="筋斗云" def sgz(self): print("我能耍棍子") class Sun(Tang,Puti): def __init__(self): self.jn3="七十二變" Tang.__init__(self) # 調(diào)用同名父類的方法 Puti.__init__(self) # 調(diào)用同名父類的方法 def zhi(self): print("還是弼馬溫") sunwukong=Sun() print(sunwukong.jn1,sunwukong.jn2,sunwukong.jn3) sunwukong.dyj() sunwukong.sgz() sunwukong.zhi() #輸出結(jié)果 #念經(jīng) 筋斗云 七十二變 #我能打妖精 #我能耍棍子 #還是弼馬溫
5、多層繼承
class A(object): pass class B(A) pass class C(B): pass #B繼承A,C繼承B class Puti(object): def __init__(self): self.model = "筋斗云" def kongfu(self): print("72般變化") class SunMonken(Puti): def __init__(self): self.wuqi = "金箍棒" def look(self): print("火眼金睛") class ChenXiang(SunMonken): def __init__(self): # SunMonken.__init__() # super函數(shù)會(huì)自動(dòng)查找參數(shù)中子類的“父類”按照繼承鏈的順序找其后一個(gè) # super(子類名稱,self).子類中的同名方法 # super(ChenXiang,self).__init__() super().__init__() super(SunMonken,self).__init__() self.bao = "寶蓮燈" print(ChenXiang.__mro__) cx = ChenXiang() print(cx.model) print(cx.wuqi) print(cx.bao) cx.kongfu() cx.look() #輸出結(jié)果 #(, , , ) #筋斗云 #金箍棒 #寶蓮燈 #72般變化 #火眼金睛
知識(shí)點(diǎn)
1、如果多個(gè)父類的方法名不相同,子類會(huì)全部繼承。
2、如果多個(gè)父類的方法名相同,子類會(huì)繼承第一個(gè)父類的。
3、如果子類也有父類的同名方法,那么子類就會(huì)選擇自己的這個(gè)方法。
4、如果子類中也有__init__方法,那么所有的父類的屬性都不會(huì)被繼承。
5、通過(guò)一個(gè)類創(chuàng)建對(duì)象,必須要執(zhí)行一次init方法,找init方法的順序要遵循類的繼承鏈。
查看一個(gè)類的繼承鏈 類名.__mro__
6、子類重寫父類的同名方法和屬性
重寫
是指在子類中重新去寫父類中已經(jīng)擁 有的方法,并且在子類中保持這個(gè)方法的名字不變,只有方法體發(fā)生改變,那么調(diào)用子類對(duì)象的這個(gè)方法以后都是子類中所寫的。
場(chǎng)景
子類繼承了父類,父類不能滿足子類的需求。子類重寫父類的同名方法。
但是子類還想在其類內(nèi)部使用父類的同名方法。
class Shi(object): def work(self,x,y): return x+y class Tu(Shi): def work(self,x,y): return Shi.work(self,x,y)/2 pass
方式
#子類中: 父類名.父類的同名方法(self) #使用super #super函數(shù)是用來(lái)獲取指定的子類在繼承鏈中的后一個(gè)類給當(dāng)前子類的self super(子類名,self).父類同名方法 #一般情況下獲取當(dāng)前子類的直接父類的同名方法可以省略括號(hào)中的參數(shù) super().父類同名方法
7、多態(tài)
不同子類的對(duì)象調(diào)用相同的父類方法,產(chǎn)生不同的結(jié)果。
Python中多態(tài)是指一類事物有多種形態(tài)。比如動(dòng)物有多種形態(tài),人,狗,貓,等等。文件有多種形態(tài):文本文件,可執(zhí)行文件。
特點(diǎn)
1、多態(tài)可以增加代碼的靈活度
2、以繼承和重寫方法為前提
3、是調(diào)用方法的技巧,不會(huì)影響類的原本設(shè)計(jì)
# 1.創(chuàng)建一個(gè)人類,這個(gè)類里面的屬性:(姓名、年齡、身高等),要求人的年齡大于0小于300,如果用戶填寫小于0則默認(rèn)為0 class Person(object): def __init__(self, name,age, height): self.name = name self.__age = 0 self.height = height self.set_age(age) def set_age(self, age): if 0 < age < 300: self.__age = age elif age < 0: self.__age = 0 elif age > 300: self.__age = 300 def get_age(self): return self.__age zs = Person("張三",500, 1.75) zs.set_age(-10) print("姓名:%s,年齡:%d歲,身高:%.2f" % (zs.name, zs.get_age(), zs.height)) #輸出結(jié)果 #姓名:張三,年齡:0歲,身高:1.75
看完了這篇文章,相信你對(duì)python面向?qū)ο笥惺裁刺卣饔辛艘欢ǖ牧私?,想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝各位的閱讀!