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