Python3.5面向對象與繼承圖文實例詳解
本文實例講述了Python3.5面向對象與繼承。分享給大家供大家參考,具體如下:
1、編程的方式

2、面向對象的基本概念



3、類的基本概念



4、類的定義與調用——簡單代碼舉例
注:建議類名的開頭字母用大寫,在Python中,類內的函數(shù)稱作方法,類外的函數(shù)還是稱作函數(shù)。




#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu
#類
class Person:
i = 10 #屬性(變量)
def eat(self): #方法(函數(shù))
print("eating...")
pass
#類的調用
a = Person()
a.eat()
運行結果:
eating...
class Person():
#對象屬性 構造方法 在實例化對象時會自動調用
# 實例化的對象就具有name和age兩個屬性
#self是指當前的對象 self不是關鍵字可以被代替,但是習慣使用self指代當前對象
def __init__(self,name,age):
# 通過構造方法聲明了兩個對象屬性
#對象.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ā)構造方法
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、類的方法


示例代碼:
#方法——靜態(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() #通過實例調用靜態(tài)方法
S.test2() #通過類名調用靜態(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) #類方法調用類屬性
c1 = C("Jack",18)
c1.test3() #通過實例調用類方法
C.test3() #通過類名調用類方法
運行結果:
test1...
test2...
test2...
test3... China
test3... China

(1)構造方法:構造方法不能重載(被覆蓋)
在Python中內置,每一個類都有一個默認的不帶參數(shù)的構造方法,不需要人為的單獨調用,在調用類的同時就運行了構造方法。
構造方法的作用:初始化數(shù)據(jù)、創(chuàng)建對象(構造方法的調用)

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu
class Person:
def __init__(self):
print("構造方法")
pass
Person() #類的調用--創(chuàng)建對象
運行結果
構造方法
帶參數(shù)的構造方法:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu
class Person:
# def __init__(self):
# print("構造方法")
def __init__(self,x):
print("帶參數(shù)的構造方法:",x)
def add(self,x,y):
print(x+y)
pass
zs = Person("hello") #類的調用--創(chuàng)建對象
zs.add(1,2)
運行結果:
帶參數(shù)的構造方法: 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() #子類繼承與父類,創(chuàng)建子類前先創(chuàng)建父類
zs.teach()
運行結果:
father 構造
father teaching
子類中重寫父類的方法:重寫體現(xiàn)多態(tài)

#!/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() #子類繼承與父類,創(chuàng)建子類前先創(chuàng)建父類
zs.teach()
運行結果:
father 構造
child teaching
新式類:
如果父類的構造方法帶參數(shù),則需要子類通過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() #子類繼承與父類,創(chuàng)建子類前先創(chuàng)建父類
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)示例代碼——人開車


更多關于Python相關內容感興趣的讀者可查看本站專題:《Python面向對象程序設計入門與進階教程》、《Python數(shù)據(jù)結構與算法教程》、《Python函數(shù)使用技巧總結》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結》及《Python入門與進階經(jīng)典教程》
希望本文所述對大家Python程序設計有所幫助。
- python面向對象之類的繼承詳解
- Python面向對象封裝繼承和多態(tài)示例講解
- Python面向對象程序設計之繼承、多態(tài)原理與用法詳解
- Python面向對象之繼承原理與用法案例分析
- Python 面向對象之封裝、繼承、多態(tài)操作實例分析
- Python面向對象之繼承和多態(tài)用法分析
- Python3.5面向對象程序設計之類的繼承和多態(tài)詳解
- Python面向對象程序設計類的封裝與繼承用法示例
- Python面向對象程序設計多繼承和多態(tài)用法示例
- Python面向對象程序設計之類的定義與繼承簡單示例
- Python面向對象之類的定義與繼承用法示例
- Python面向對象類編寫細節(jié)分析【類,方法,繼承,超類,接口等】
- Python面向對象程序設計OOP入門教程【類,實例,繼承,重載等】
- Python面向對象之繼承和組合用法實例分析
- Python面向對象程序設計之繼承與多繼承用法分析
- Python面向對象類的繼承實例詳解
- Python面向對象類繼承和組合實例分析
- Python 面向對象編程的三大特性之繼承
相關文章
Python+Pika+RabbitMQ環(huán)境部署及實現(xiàn)工作隊列的實例教程
RabbitMQ是一個消息隊列服務器,在本文中我們將學習到Python+Pika+RabbitMQ環(huán)境部署及實現(xiàn)工作隊列的實例教程,需要的朋友可以參考下2016-06-06
Python BeautifulSoup [解決方法] TypeError: list indices must be
這篇文章主要介紹了Python BeautifulSoup [解決方法] TypeError: list indices must be integers or slices, not str,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-08-08
Python中連通域分割Two-Pass算法的原理與實現(xiàn)詳解
兩遍掃描法(?Two-Pass?),正如其名,指的就是通過掃描兩遍圖像,將圖像中存在的所有連通域找出并標記,本文將詳細介紹Two-Pass算法的原理與實現(xiàn),需要的可以參考下2023-12-12
GPU狀態(tài)監(jiān)測?nvidia-smi?命令的用法詳解
這篇文章主要介紹了GPU狀態(tài)監(jiān)測?nvidia-smi?命令的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11

