Python3.5面向?qū)ο笈c繼承圖文實(shí)例詳解
本文實(shí)例講述了Python3.5面向?qū)ο笈c繼承。分享給大家供大家參考,具體如下:
1、編程的方式
2、面向?qū)ο蟮幕靖拍?/strong>
3、類(lèi)的基本概念
4、類(lèi)的定義與調(diào)用——簡(jiǎn)單代碼舉例
注:建議類(lèi)名的開(kāi)頭字母用大寫(xiě),在Python中,類(lèi)內(nèi)的函數(shù)稱(chēng)作方法,類(lèi)外的函數(shù)還是稱(chēng)作函數(shù)。
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu #類(lèi) class Person: i = 10 #屬性(變量) def eat(self): #方法(函數(shù)) print("eating...") pass #類(lèi)的調(diào)用 a = Person() a.eat()
運(yùn)行結(jié)果:
eating...
class Person(): #對(duì)象屬性 構(gòu)造方法 在實(shí)例化對(duì)象時(shí)會(huì)自動(dòng)調(diào)用 # 實(shí)例化的對(duì)象就具有name和age兩個(gè)屬性 #self是指當(dāng)前的對(duì)象 self不是關(guān)鍵字可以被代替,但是習(xí)慣使用self指代當(dāng)前對(duì)象 def __init__(self,name,age): # 通過(guò)構(gòu)造方法聲明了兩個(gè)對(duì)象屬性 #對(duì)象.name屬性 = name參數(shù) self.name = name self.age = age #聲明一個(gè)類(lèi)方法 def speak(self): print("Hello,my name is %s,and I'm %d years old" %(self.name,self.age)) #創(chuàng)建實(shí)例對(duì)象 會(huì)觸發(fā)構(gòu)造方法 people01 = Person("Jack",18) #通過(guò)Person類(lèi)實(shí)例化出一個(gè)people對(duì)象 print(people01) #打印Person對(duì)象在內(nèi)存中的地址 print(people01.name,people01.age) #打印對(duì)象的屬性 #給對(duì)象添加屬性 people01.sex = "F" print(people01.sex) #類(lèi)方法的調(diào)用 people01.speak()
運(yùn)行結(jié)果:
<__main__.Person object at 0x0059C5B0>
Jack 18
F
Hello,my name is Jack,and I'm 18 years old
5、類(lèi)的方法
示例代碼:
#方法——靜態(tài)方法 class S(): #實(shí)例(對(duì)象)屬性 def __init__(self,name,age): #self一般指實(shí)例對(duì)象 self.name = name self.age = age @staticmethod #用staticmethod裝飾器修飾 表示test2為靜態(tài)方法 def test2(): #不能傳入self 對(duì)象的引用 print("test2...") s1 = S("Joe",18) s1.test2() #通過(guò)實(shí)例調(diào)用靜態(tài)方法 S.test2() #通過(guò)類(lèi)名調(diào)用靜態(tài)方法 #方法——類(lèi)方法 class C(): #類(lèi)屬性 country = "China" #實(shí)例(對(duì)象)屬性 def __init__(self,name,age): self.name = name self.age = age @classmethod #用classmethod裝飾器修飾 表示test3為類(lèi)方法 def test3(cls): #cls指的是類(lèi) print("test3...",cls.country) #類(lèi)方法調(diào)用類(lèi)屬性 c1 = C("Jack",18) c1.test3() #通過(guò)實(shí)例調(diào)用類(lèi)方法 C.test3() #通過(guò)類(lèi)名調(diào)用類(lèi)方法
運(yùn)行結(jié)果:
test1...
test2...
test2...
test3... China
test3... China
(1)構(gòu)造方法:構(gòu)造方法不能重載(被覆蓋)
在Python中內(nèi)置,每一個(gè)類(lèi)都有一個(gè)默認(rèn)的不帶參數(shù)的構(gòu)造方法,不需要人為的單獨(dú)調(diào)用,在調(diào)用類(lèi)的同時(shí)就運(yùn)行了構(gòu)造方法。
構(gòu)造方法的作用:初始化數(shù)據(jù)、創(chuàng)建對(duì)象(構(gòu)造方法的調(diào)用)
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu class Person: def __init__(self): print("構(gòu)造方法") pass Person() #類(lèi)的調(diào)用--創(chuàng)建對(duì)象
運(yùn)行結(jié)果
構(gòu)造方法
帶參數(shù)的構(gòu)造方法:
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu class Person: # def __init__(self): # print("構(gòu)造方法") def __init__(self,x): print("帶參數(shù)的構(gòu)造方法:",x) def add(self,x,y): print(x+y) pass zs = Person("hello") #類(lèi)的調(diào)用--創(chuàng)建對(duì)象 zs.add(1,2)
運(yùn)行結(jié)果:
帶參數(shù)的構(gòu)造方法: hello
3
(2)面向?qū)ο蟮乃悸?/strong>
(3)類(lèi)方法
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu #類(lèi)方法 class Person: def eat(self): #類(lèi)方法 print("eating...") pass a = Person() #類(lèi)方法調(diào)用 a.eat()
運(yùn)行結(jié)果:
eating...
(4)私有方法
只允許在類(lèi)的內(nèi)部使用,專(zhuān)門(mén)為類(lèi)服務(wù)的。
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu class Person: def eat(self): # 類(lèi)方法 print("eating...") self.__sleep() # 調(diào)用私有方法 def __sleep(self): #私有方法--類(lèi)的外部不能使用 print("sleeping...") pass b = Person() b.eat()
運(yùn)行結(jié)果:
eating...
sleeping...
6、屬性
示例屬性、類(lèi)屬性代碼:
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu #屬性 class a(): def __init__(self,name,age): self.name = name #實(shí)例屬性 self.age = age #類(lèi)內(nèi)部使用實(shí)例屬性 self.實(shí)例屬性名 def get(self): print(self.name) a1 = a("Jack",18) #類(lèi)內(nèi)部使用實(shí)例屬性 self.實(shí)例屬性名 a1.get() #類(lèi)外部使用實(shí)例屬性 對(duì)象名.實(shí)例屬性名 print(a1.name) #類(lèi)屬性 在__init__()方法外聲明 #類(lèi)內(nèi)部使用 類(lèi)名.屬性名 調(diào)用 #類(lèi)外部使用通過(guò) 類(lèi)名.屬性名 或者 對(duì)象名.屬性名 方式調(diào)用 class b(): name = "Janne" #類(lèi)屬性 #類(lèi)內(nèi)部使用類(lèi)屬性——類(lèi)名.屬性名 def get(self): print(b.name) #類(lèi)外部使用類(lèi)屬性 通過(guò) 類(lèi)名.屬性名 print(b.name) #類(lèi)外部使用類(lèi)屬性 通過(guò) 對(duì)象名.屬性名 b1 = b() print(b1.name) #類(lèi)內(nèi)部使用類(lèi)屬性——類(lèi)名.屬性名 b1.get()
運(yùn)行結(jié)果:
Jack
Jack
Janne
Janne
Janne
(1)類(lèi)屬性/類(lèi)變量:在類(lèi)的外部可以調(diào)用
(2)私有變量/私有屬性:只能在類(lèi)的內(nèi)部,通過(guò)self使用
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu #屬性/變量 class Person: i = 10 #類(lèi)屬性/類(lèi)變量 __j = 20 #私有屬性/私有變量 def eat(self): # 類(lèi)方法 print("eating...") print(self.__j) # 調(diào)用私有變量 pass b = Person() print(b.i) #通過(guò)引用調(diào)用(建議) print(Person.i) #可通過(guò)類(lèi)名調(diào)用 b.eat()
運(yùn)行結(jié)果:
10
10
eating...
20
class GirlFriend(): #聲明對(duì)象屬性 通過(guò)構(gòu)造方法 def __init__(self,name,age,phone,pwd): #給對(duì)象的屬性(變量名)前面加上 __ 成為了私有的屬性 self.__name = name self.__age = age self.__phone = phone self.__pwd = pwd #通過(guò)預(yù)留的接口 對(duì)私有屬性名進(jìn)行訪問(wèn)或修改 def getInfo(self,pwd): if pwd == "1234": print("My girlfriend is %s,and she's %d years old,Her telephone number is %d"%(self.__name,self.__age,self.__phone)) else: print("you failed...") def setName(self,name): self.__name = name #類(lèi)內(nèi)修改私有屬性 gf = GirlFriend("Janne",18,13511112222,"1234") gf.setName("Malianna") gf.getInfo("1234")
運(yùn)行結(jié)果:
My girlfriend is Malianna,and she's 18 years old,Her telephone number is 13511112222
(3)特殊的類(lèi)屬性
7、繼承
Python中支持多繼承,作用:復(fù)用,不建議使用多繼承(類(lèi)對(duì)象爆炸)、
繼承示例代碼:
#繼承 #父類(lèi) class Animal(): def __init__(self,name,food,drinks): self.name = name self.food = food self.drinks = drinks def eat(self): print("%s 愛(ài)吃 %s" %(self.name,self.food)) def drink(self): print("%s 愛(ài)喝 %s" %(self.name,self.drinks)) #子類(lèi) class Dog(Animal): def sound(self): print("wonf wonf...") class Cat(Animal): def sound(self): print("miao miao...") dogs = Dog("哮天犬","骨頭","雪碧") dogs.eat() dogs.drink() dogs.sound() print("========================") cats = Cat("波斯貓","魚(yú)","可樂(lè)") cats.eat() cats.drink() cats.sound()
運(yùn)行結(jié)果:
哮天犬 愛(ài)吃 骨頭
哮天犬 愛(ài)喝 雪碧
wonf wonf...
========================
波斯貓 愛(ài)吃 魚(yú)
波斯貓 愛(ài)喝 可樂(lè)
miao miao...
示例一:
多繼承
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu #多繼承 class Run3000: def run(self): print("run 3000") class Jump3: def jump(self): print("jump 3") class Sport(Run3000,Jump3): #繼承 pass sport = Sport() sport.run() sport.jump()
運(yùn)行結(jié)果:
run 3000
jump 3
示例二:
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu class Father: def __init__(self): print("father 構(gòu)造") def teach(self): print("father teaching") class Child(Father): pass zs = Child() #子類(lèi)繼承與父類(lèi),創(chuàng)建子類(lèi)前先創(chuàng)建父類(lèi) zs.teach()
運(yùn)行結(jié)果:
father 構(gòu)造
father teaching
子類(lèi)中重寫(xiě)父類(lèi)的方法:重寫(xiě)體現(xiàn)多態(tài)
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu class Father: def __init__(self): print("father 構(gòu)造") def teach(self): print("father teaching") class Child(Father): def teach(self): #方法重寫(xiě) print("child teaching") zs = Child() #子類(lèi)繼承與父類(lèi),創(chuàng)建子類(lèi)前先創(chuàng)建父類(lèi) zs.teach()
運(yùn)行結(jié)果:
father 構(gòu)造
child teaching
新式類(lèi):
如果父類(lèi)的構(gòu)造方法帶參數(shù),則需要子類(lèi)通過(guò)super操作去完成調(diào)用。
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu #新式類(lèi) class Father(object): def __init__(self,i): print("father 構(gòu)造"+ i) def teach(self): print("father teaching") class Child(Father): def __init__(self): super(Child,self).__init__("hello") def teach(self): #方法重寫(xiě) print("child teaching") zs = Child() #子類(lèi)繼承與父類(lèi),創(chuàng)建子類(lèi)前先創(chuàng)建父類(lèi) zs.teach() #運(yùn)行結(jié)果: father 構(gòu)造hello child teaching
運(yùn)行結(jié)果:
father 構(gòu)造hello
child teaching
多繼承又不完全,父類(lèi)都有構(gòu)造方法時(shí),當(dāng)子類(lèi)多繼承時(shí),只有一個(gè)父類(lèi)的構(gòu)造方法被調(diào)用。
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu class Run3000: def __init__(self): print("run 3000 構(gòu)造方法") def run(self): print("run 3000") class Jump3: def __init__(self): print("jump 3 構(gòu)造方法") def jump(self): print("jump 3") class Sport(Run3000,Jump3): #繼承 pass sport = Sport() sport.run() sport.jump()
運(yùn)行結(jié)果:
run 3000 構(gòu)造方法
run 3000
jump 3
8、面向?qū)ο缶幊?/strong>
(1)定義
(2)示例代碼——人開(kāi)車(chē)
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Python面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)與進(jìn)階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門(mén)與進(jìn)階經(jīng)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
- python面向?qū)ο笾?lèi)的繼承詳解
- Python面向?qū)ο蠓庋b繼承和多態(tài)示例講解
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)之繼承、多態(tài)原理與用法詳解
- Python面向?qū)ο笾^承原理與用法案例分析
- Python 面向?qū)ο笾庋b、繼承、多態(tài)操作實(shí)例分析
- Python面向?qū)ο笾^承和多態(tài)用法分析
- Python3.5面向?qū)ο蟪绦蛟O(shè)計(jì)之類(lèi)的繼承和多態(tài)詳解
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)類(lèi)的封裝與繼承用法示例
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)多繼承和多態(tài)用法示例
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)之類(lèi)的定義與繼承簡(jiǎn)單示例
- Python面向?qū)ο笾?lèi)的定義與繼承用法示例
- Python面向?qū)ο箢?lèi)編寫(xiě)細(xì)節(jié)分析【類(lèi),方法,繼承,超類(lèi),接口等】
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)OOP入門(mén)教程【類(lèi),實(shí)例,繼承,重載等】
- Python面向?qū)ο笾^承和組合用法實(shí)例分析
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)之繼承與多繼承用法分析
- Python面向?qū)ο箢?lèi)的繼承實(shí)例詳解
- Python面向?qū)ο箢?lèi)繼承和組合實(shí)例分析
- Python 面向?qū)ο缶幊痰娜筇匦灾^承
相關(guān)文章
python人工智能tensorflow函數(shù)np.random模塊使用
這篇文章主要為大家介紹了python人工智能tensorflow函數(shù)np.random模塊使用方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05基于tkinter中ttk控件的width-height設(shè)置方式
這篇文章主要介紹了基于tkinter中ttk控件的width-height設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05Python數(shù)據(jù)可視化實(shí)現(xiàn)正態(tài)分布(高斯分布)
這篇文章主要介紹了Python數(shù)據(jù)可視化實(shí)現(xiàn)正態(tài)分布(高斯分布),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08Python字符串的字符轉(zhuǎn)換、字符串劈分、字符串合并問(wèn)題分析
這篇文章主要介紹了Python字符串的字符轉(zhuǎn)換、字符串劈分、字符串合并,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03Python利用Turtle庫(kù)繪制一顆櫻花樹(shù)
后唐李煜曾說(shuō)道,櫻花落盡春將困,秋千架下歸時(shí)。漏暗斜月遲遲,花在枝。櫻花落盡的時(shí)候春天也將過(guò)去了,秋千架下歸去時(shí)。天上的斜月姍姍來(lái)遲,花還在枝頭。本文將用Python+Turtle繪制一顆櫻花樹(shù),感興趣的可以嘗試一下2022-04-04Python計(jì)算標(biāo)準(zhǔn)差之numpy.std和torch.std的區(qū)別
Torch自稱(chēng)為神經(jīng)網(wǎng)絡(luò)中的numpy,它會(huì)將torch產(chǎn)生的tensor放在GPU中加速運(yùn)算,就像numpy會(huì)把a(bǔ)rray放在CPU中加速運(yùn)算,下面這篇文章主要給大家介紹了關(guān)于Python?Numpy計(jì)算標(biāo)準(zhǔn)差之numpy.std和torch.std區(qū)別的相關(guān)資料,需要的朋友可以參考下2022-08-08Pytorch上下采樣函數(shù)--interpolate用法
這篇文章主要介紹了Pytorch上下采樣函數(shù)--interpolate用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07