您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Python3.5面向對象與繼承的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
具體如下:
1、編程的方式
2、面向對象的基本概念
3、類的基本概念
4、類的定義與調用——簡單代碼舉例
注:建議類名的開頭字母用大寫,在Python中,類內的函數稱作方法,類外的函數還是稱作函數。
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu #類 class Person: i = 10 #屬性(變量) def eat(self): #方法(函數) print("eating...") pass #類的調用 a = Person() a.eat()
運行結果:
eating...
class Person(): #對象屬性 構造方法 在實例化對象時會自動調用 # 實例化的對象就具有name和age兩個屬性 #self是指當前的對象 self不是關鍵字可以被代替,但是習慣使用self指代當前對象 def __init__(self,name,age): # 通過構造方法聲明了兩個對象屬性 #對象.name屬性 = name參數 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)) #創建實例對象 會觸發構造方法 people01 = Person("Jack",18) #通過Person類實例化出一個people對象 print(people01) #打印Person對象在內存中的地址 print(people01.name,people01.age) #打印對象的屬性 #給對象添加屬性 people01.sex = "F" print(people01.sex) #類方法的調用 people01.speak()
運行結果:
<__main__.Person object at 0x0059C5B0>
Jack 18
F
Hello,my name is Jack,and I'm 18 years old
5、類的方法
示例代碼:
#方法——靜態方法 class S(): #實例(對象)屬性 def __init__(self,name,age): #self一般指實例對象 self.name = name self.age = age @staticmethod #用staticmethod裝飾器修飾 表示test2為靜態方法 def test2(): #不能傳入self 對象的引用 print("test2...") s1 = S("Joe",18) s1.test2() #通過實例調用靜態方法 S.test2() #通過類名調用靜態方法 #方法——類方法 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) #類方法調用類屬性 c1 = C("Jack",18) c1.test3() #通過實例調用類方法 C.test3() #通過類名調用類方法
運行結果:
test1...
test2...
test2...
test3... China
test3... China
(1)構造方法:構造方法不能重載(被覆蓋)
在Python中內置,每一個類都有一個默認的不帶參數的構造方法,不需要人為的單獨調用,在調用類的同時就運行了構造方法。
構造方法的作用:初始化數據、創建對象(構造方法的調用)
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu class Person: def __init__(self): print("構造方法") pass Person() #類的調用--創建對象
運行結果
構造方法
帶參數的構造方法:
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu class Person: # def __init__(self): # print("構造方法") def __init__(self,x): print("帶參數的構造方法:",x) def add(self,x,y): print(x+y) pass zs = Person("hello") #類的調用--創建對象 zs.add(1,2)
運行結果:
帶參數的構造方法: hello
3
(2)面向對象的思路
(3)類方法
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu #類方法 class Person: def eat(self): #類方法 print("eating...") pass a = Person() #類方法調用 a.eat()
運行結果:
eating...
(4)私有方法
只允許在類的內部使用,專門為類服務的。
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu class Person: def eat(self): # 類方法 print("eating...") self.__sleep() # 調用私有方法 def __sleep(self): #私有方法--類的外部不能使用 print("sleeping...") pass b = Person() b.eat()
運行結果:
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 #類內部使用實例屬性 self.實例屬性名 def get(self): print(self.name) a1 = a("Jack",18) #類內部使用實例屬性 self.實例屬性名 a1.get() #類外部使用實例屬性 對象名.實例屬性名 print(a1.name) #類屬性 在__init__()方法外聲明 #類內部使用 類名.屬性名 調用 #類外部使用通過 類名.屬性名 或者 對象名.屬性名 方式調用 class b(): name = "Janne" #類屬性 #類內部使用類屬性——類名.屬性名 def get(self): print(b.name) #類外部使用類屬性 通過 類名.屬性名 print(b.name) #類外部使用類屬性 通過 對象名.屬性名 b1 = b() print(b1.name) #類內部使用類屬性——類名.屬性名 b1.get()
運行結果:
Jack
Jack
Janne
Janne
Janne
(1)類屬性/類變量:在類的外部可以調用
(2)私有變量/私有屬性:只能在類的內部,通過self使用
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu #屬性/變量 class Person: i = 10 #類屬性/類變量 __j = 20 #私有屬性/私有變量 def eat(self): # 類方法 print("eating...") print(self.__j) # 調用私有變量 pass b = Person() print(b.i) #通過引用調用(建議) print(Person.i) #可通過類名調用 b.eat()
運行結果:
10
10
eating...
20
class GirlFriend(): #聲明對象屬性 通過構造方法 def __init__(self,name,age,phone,pwd): #給對象的屬性(變量名)前面加上 __ 成為了私有的屬性 self.__name = name self.__age = age self.__phone = phone self.__pwd = pwd #通過預留的接口 對私有屬性名進行訪問或修改 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 #類內修改私有屬性 gf = GirlFriend("Janne",18,13511112222,"1234") gf.setName("Malianna") gf.getInfo("1234")
運行結果:
My girlfriend is Malianna,and she's 18 years old,Her telephone number is 13511112222
(3)特殊的類屬性
7、繼承
Python中支持多繼承,作用:復用,不建議使用多繼承(類對象爆炸)、
繼承示例代碼:
#繼承 #父類 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()
運行結果:
哮天犬 愛吃 骨頭
哮天犬 愛喝 雪碧
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()
運行結果:
run 3000
jump 3
示例二:
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu class Father: def __init__(self): print("father 構造") def teach(self): print("father teaching") class Child(Father): pass zs = Child() #子類繼承與父類,創建子類前先創建父類 zs.teach()
運行結果:
father 構造
father teaching
子類中重寫父類的方法:重寫體現多態
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu class Father: def __init__(self): print("father 構造") def teach(self): print("father teaching") class Child(Father): def teach(self): #方法重寫 print("child teaching") zs = Child() #子類繼承與父類,創建子類前先創建父類 zs.teach()
運行結果:
father 構造
child teaching
新式類:
如果父類的構造方法帶參數,則需要子類通過super操作去完成調用。
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu #新式類 class Father(object): def __init__(self,i): print("father 構造"+ 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() #子類繼承與父類,創建子類前先創建父類 zs.teach() #運行結果: father 構造hello child teaching
運行結果:
father 構造hello
child teaching
多繼承又不完全,父類都有構造方法時,當子類多繼承時,只有一個父類的構造方法被調用。
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:ZhengzhengLiu class Run3000: def __init__(self): print("run 3000 構造方法") def run(self): print("run 3000") class Jump3: def __init__(self): print("jump 3 構造方法") def jump(self): print("jump 3") class Sport(Run3000,Jump3): #繼承 pass sport = Sport() sport.run() sport.jump()
運行結果:
run 3000 構造方法
run 3000
jump 3
8、面向對象編程
(1)定義
(2)示例代碼——人開車
關于“Python3.5面向對象與繼承的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。