Python編程方式:
面向過程編程
面向函數(shù)編程
面向?qū)ο缶幊?/p>
名稱定義:
如果函數(shù)沒有在類中稱之為函數(shù)
如果函數(shù)在類中稱之為方法
創(chuàng)建類
# 創(chuàng)建一個類,類名是Class_basis
class Class_basis:
# 在類里面創(chuàng)建了一個方法ret,類里面的方法必須加一個self關鍵字
def ret(self):
# 當調(diào)用方法的時候輸出ret
print("ret")
使用類
# 通過Class_basis類創(chuàng)建一個對象obj(創(chuàng)建一個Class_basis實例),類名后面加括號
obj = Class_basis()
# 通過對象調(diào)用類中的ret方法
obj.ret()
類的內(nèi)存地址對應關系
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# 創(chuàng)建一個類,類名是Class_basis
class Class_basis:
# 在類里面創(chuàng)建了一個方法ret
def ret(self,):
# 輸出self的內(nèi)存地址
print("方法ret的self內(nèi)存地址", id(self))
# 創(chuàng)建一個對象obj,類名后面加括號
obj = Class_basis()
# 輸出對象obj的內(nèi)存地址
print("obj對象內(nèi)存地址", id(obj))
# 通過對象調(diào)用類中的ret方法
obj.ret()
執(zhí)行結(jié)果
C:\Python35\python.exe F:/Python_code/sublime/Week06/Day02/class_01.py
obj對象內(nèi)存地址 2420760156536
方法ret的self內(nèi)存地址 2420760156536
Process finished with exit code 0
通過上面的測試可以很清楚的看到obj
對象和類的方法中self
內(nèi)存地址是一樣的,那么方法中的self
就等于obj
如圖
self
是形式參數(shù),有Python自行傳遞。
封裝就是將內(nèi)容封裝到某個地方,以后再去調(diào)用被封裝在某處的內(nèi)容,在使用面向?qū)ο蟮姆庋b特性時,需要:
將內(nèi)容封裝到某處
從某處調(diào)用被封裝的內(nèi)容
class Foo:
def ret(self):
# 輸出backend變量的內(nèi)容
print(self.backend)
obj = Foo()
# 在對象中創(chuàng)建一個backend變量
obj.backend = "as"
obj.ret()
執(zhí)行結(jié)果
C:\Python35\python.exe F:/Python_code/sublime/Week06/Day02/class_01.py
as
Process finished with exit code 0
上面的封裝是一種非主流的封裝方式,下面的__init__構(gòu)造方法
封裝方式是主流的封裝方式
class Foo:
# 進入類的時候首先執(zhí)行__init__方法
def __init__(self, name):
"""
__init__稱之為構(gòu)造方法
:param name: Foo傳遞過來的參數(shù)
"""
# 在類中創(chuàng)建一個成員Name,它的值是傳過來的形參name
self.Name = name
# 類的方法
def user(self):
# 輸出Name的值
print(self.Name)
# 創(chuàng)建對象,并且將"Ansheng"封裝到對象中,類+括號的時候會自動執(zhí)行__init__方法
obj = Foo("Yangwen")
# 執(zhí)行user方法
obj.user()
執(zhí)行結(jié)果
C:\Python35\python.exe F:/Python_code/sublime/Week06/Day02/class_01.py
Ansheng
Process finished with exit code 0
del_ 解釋器銷毀對象時候自動調(diào)用,特殊的名:析構(gòu)方法
封裝的應用場景之一就是當同一類型的方法具有相同參數(shù)時,直接封裝到對象即可。
通過用戶輸入年齡和姓名輸出用戶的個人信息
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
class Foo:
def __init__(self, name, age):
self.Name = name
self.Age = age
def info(self):
print("""
My name is: %s
My age is: %d
""" % (self.Name, self.Age))
ansheng = Foo("Yangwen", 18)
ansheng.info()
xiaoming = Foo("xiaoming", 30)
xiaoming.info()
執(zhí)行結(jié)果
C:\Python35\python.exe F:/Python_code/sublime/Week06/Day02/class_01.py
My name is: Ansheng
My age is: 18
My name is: xiaoming
My age is: 30
Process finished with exit code 0
封裝的應用場景之二就是把類當作模塊,創(chuàng)建多個對象(對象內(nèi)封裝的數(shù)據(jù)可以不一樣)
繼承,面向?qū)ο笾械睦^承和現(xiàn)實生活中的繼承相同,即:子可以繼承父的內(nèi)容。
實例
創(chuàng)建一個人
信息相關的類,比如說人擁有四肢
、頭發(fā)
、眼
、耳朵
等信息,在創(chuàng)建一個中國人和外國人的類,中國人的語言是中文,皮膚是黃色,外國人的語言是英文,皮膚是黑色。
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
class People:
def __init__(self):
print("""
你的通用特征有:四肢、頭發(fā)、眼、耳朵
""")
class China(People):
def info(self):
print("""
你是中國人,你的語言是中文,皮膚是黃色
""")
class Us(People):
def info(self):
print("""
你是美國人,你的語言是英文,皮膚是黑色
""")
c = China()
c.info()
m = Us()
m.info()
執(zhí)行結(jié)果
C:\Python35\python.exe F:/Python_code/sublime/Week06/Day02/class_01.py
你的通用特征有:四肢、頭發(fā)、眼、耳朵
你是中國人,你的語言是中文,皮膚是黃色
你的通用特征有:四肢、頭發(fā)、眼、耳朵
你是美國人,你的語言是英文,皮膚是黑色
Process finished with exit code 0
People
—> 父類
or 基類
China
and Us
—> 子類
or 派生類
派生類可以集成基類中所有的功能
派生類和積累同時存在,優(yōu)先找派生類
Python類可以同時繼承多個類
多繼承就是在class My(China, Us):
括號內(nèi)放入多個父類名。
多繼承順序
當My(China, Us)
時,因為My
類中有info
這個方法,所以輸出的結(jié)果是我就是我
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
class China:
def info(self):
print("你是中國人")
class Us:
def info(self):
print("你是美國人")
class My(China, Us):
def info(self):
print("我就是我")
c = My()
c.info()
執(zhí)行結(jié)果
C:\Python35\python.exe F:/Python_code/sublime/Week06/Day02/class_01.py
我就是我
Process finished with exit code 0
當My(China, Us)
時,My
類中沒有info
這個方法,輸出的結(jié)果是你是中國人
,默認括號內(nèi)左邊的類優(yōu)先
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
class China:
def info(self):
print("你是中國人")
class Us:
def info(self):
print("你是美國人")
class My(China, Us):
pass
c = My()
c.info()
執(zhí)行結(jié)果
C:\Python35\python.exe F:/Python_code/sublime/Week06/Day02/class_01.py
你是中國人
Process finished with exit code 0
當My(China, Us)
時,My
類中沒有info
這個方法,China
類中也沒有info
這個方法,輸出的結(jié)果是你是美國人
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
class China:
pass
class Us:
def info(self):
print("你是美國人")
class My(China, Us):
pass
c = My()
c.info()
執(zhí)行結(jié)果
C:\Python35\python.exe F:/Python_code/sublime/Week06/Day02/class_01.py
你是美國人
Process finished with exit code 0
頂層兩個類沒有父類的情況
頂層兩個類有父類的情況
本文出自 “一盞燭光” 博客,謝絕轉(zhuǎn)載!
更多建議: