Python面向?qū)ο蠡A

2018-06-08 17:20 更新


面向?qū)ο蠡窘榻B

Python編程方式:

  1. 面向過程編程

  2. 面向函數(shù)編程

  3. 面向?qū)ο缶幊?/p>

名稱定義:

  1. 如果函數(shù)沒有在類中稱之為函數(shù)

  2. 如果函數(shù)在類中稱之為方法


創(chuàng)建類

  1. # 創(chuàng)建一個類,類名是Class_basis

  2. class Class_basis:

  3.    # 在類里面創(chuàng)建了一個方法ret,類里面的方法必須加一個self關鍵字

  4.    def ret(self):

  5.        # 當調(diào)用方法的時候輸出ret

  6.        print("ret")

使用類

  1. # 通過Class_basis類創(chuàng)建一個對象obj(創(chuàng)建一個Class_basis實例),類名后面加括號

  2. obj = Class_basis()

  3. # 通過對象調(diào)用類中的ret方法

  4. obj.ret()

類的內(nèi)存地址對應關系

面向?qū)ο笾畇elf

  1. #!/usr/bin/env python

  2. # _*_ coding:utf-8 _*_

  3. # 創(chuàng)建一個類,類名是Class_basis

  4. class Class_basis:

  5.    # 在類里面創(chuàng)建了一個方法ret

  6.    def ret(self,):

  7.        # 輸出self的內(nèi)存地址

  8.        print("方法ret的self內(nèi)存地址", id(self))

  9. # 創(chuàng)建一個對象obj,類名后面加括號

  10. obj = Class_basis()

  11. # 輸出對象obj的內(nèi)存地址

  12. print("obj對象內(nèi)存地址", id(obj))

  13. # 通過對象調(diào)用類中的ret方法

  14. obj.ret()

執(zhí)行結(jié)果

  1. C:\Python35\python.exe F:/Python_code/sublime/Week06/Day02/class_01.py

  2. obj對象內(nèi)存地址 2420760156536

  3. 方法retself內(nèi)存地址 2420760156536

  4. Process finished with exit code 0

通過上面的測試可以很清楚的看到obj對象和類的方法中self內(nèi)存地址是一樣的,那么方法中的self就等于obj

如圖

self是形式參數(shù),有Python自行傳遞。

面向?qū)ο笾庋b

封裝就是將內(nèi)容封裝到某個地方,以后再去調(diào)用被封裝在某處的內(nèi)容,在使用面向?qū)ο蟮姆庋b特性時,需要:

  1. 將內(nèi)容封裝到某處

  2. 從某處調(diào)用被封裝的內(nèi)容

  1. class Foo:

  2.    def ret(self):

  3.        # 輸出backend變量的內(nèi)容

  4.        print(self.backend)

  5. obj = Foo()

  6. # 在對象中創(chuàng)建一個backend變量

  7. obj.backend = "as"

  8. obj.ret()

執(zhí)行結(jié)果

  1. C:\Python35\python.exe F:/Python_code/sublime/Week06/Day02/class_01.py

  2. as

  3. Process finished with exit code 0

上面的封裝是一種非主流的封裝方式,下面的__init__構(gòu)造方法封裝方式是主流的封裝方式

  1. class Foo:

  2.    # 進入類的時候首先執(zhí)行__init__方法

  3.    def __init__(self, name):

  4.        """

  5.        __init__稱之為構(gòu)造方法

  6.        :param name: Foo傳遞過來的參數(shù)

  7.        """

  8.        # 在類中創(chuàng)建一個成員Name,它的值是傳過來的形參name

  9.        self.Name = name

  10.    # 類的方法

  11.    def user(self):

  12.        # 輸出Name的值

  13.        print(self.Name)

  14. # 創(chuàng)建對象,并且將"Ansheng"封裝到對象中,類+括號的時候會自動執(zhí)行__init__方法

  15. obj = Foo("Yangwen")

  16. # 執(zhí)行user方法

  17. obj.user()

執(zhí)行結(jié)果

  1. C:\Python35\python.exe F:/Python_code/sublime/Week06/Day02/class_01.py

  2. Ansheng

  3. Process finished with exit code 0

del_ 解釋器銷毀對象時候自動調(diào)用,特殊的名:析構(gòu)方法

封裝的應用場景之一就是當同一類型的方法具有相同參數(shù)時,直接封裝到對象即可。

實例

通過用戶輸入年齡和姓名輸出用戶的個人信息

  1. #!/usr/bin/env python

  2. # _*_ coding:utf-8 _*_

  3. class Foo:

  4.    def __init__(self, name, age):

  5.        self.Name = name

  6.        self.Age = age

  7.    def info(self):

  8.        print("""

  9.            My name is: %s

  10.            My age is: %d

  11.        """ % (self.Name, self.Age))

  12. ansheng = Foo("Yangwen", 18)

  13. ansheng.info()

  14. xiaoming = Foo("xiaoming", 30)

  15. xiaoming.info()

執(zhí)行結(jié)果

  1. C:\Python35\python.exe F:/Python_code/sublime/Week06/Day02/class_01.py

  2.            My name is: Ansheng

  3.            My age is: 18

  4.            My name is: xiaoming

  5.            My age is: 30

  6. Process finished with exit code 0

封裝的應用場景之二就是把類當作模塊,創(chuàng)建多個對象(對象內(nèi)封裝的數(shù)據(jù)可以不一樣)

面向?qū)ο笾^承基礎

繼承,面向?qū)ο笾械睦^承和現(xiàn)實生活中的繼承相同,即:子可以繼承父的內(nèi)容。

實例

創(chuàng)建一個信息相關的類,比如說人擁有四肢頭發(fā)、、耳朵等信息,在創(chuàng)建一個中國人和外國人的類,中國人的語言是中文,皮膚是黃色,外國人的語言是英文,皮膚是黑色。

  1. #!/usr/bin/env python

  2. # _*_ coding:utf-8 _*_

  3. class People:

  4.    def __init__(self):

  5.        print("""

  6.        你的通用特征有:四肢、頭發(fā)、眼、耳朵

  7.        """)

  8. class China(People):

  9.    def info(self):

  10.        print("""

  11.        你是中國人,你的語言是中文,皮膚是黃色

  12.        """)

  13. class Us(People):

  14.    def info(self):

  15.        print("""

  16.        你是美國人,你的語言是英文,皮膚是黑色

  17.        """)

  18. c = China()

  19. c.info()

  20. m = Us()

  21. m.info()

執(zhí)行結(jié)果

  1. C:\Python35\python.exe F:/Python_code/sublime/Week06/Day02/class_01.py

  2.        你的通用特征有:四肢、頭發(fā)、眼、耳朵

  3.        你是中國人,你的語言是中文,皮膚是黃色

  4.        你的通用特征有:四肢、頭發(fā)、眼、耳朵

  5.        你是美國人,你的語言是英文,皮膚是黑色

  6. Process finished with exit code 0

People —> 父類 or 基類

China and Us —> 子類 or 派生類

  1. 派生類可以集成基類中所有的功能

  2. 派生類和積累同時存在,優(yōu)先找派生類

  3. Python類可以同時繼承多個類

面向?qū)ο笾^承之多繼承(新式類)

多繼承就是在class My(China, Us):括號內(nèi)放入多個父類名。

多繼承順序

My(China, Us)時,因為My類中有info這個方法,所以輸出的結(jié)果是我就是我

  1. #!/usr/bin/env python

  2. # _*_ coding:utf-8 _*_

  3. class China:

  4.    def info(self):

  5.        print("你是中國人")

  6. class Us:

  7.    def info(self):

  8.        print("你是美國人")

  9. class My(China, Us):

  10.    def info(self):

  11.        print("我就是我")

  12. c = My()

  13. c.info()

執(zhí)行結(jié)果

  1. C:\Python35\python.exe F:/Python_code/sublime/Week06/Day02/class_01.py

  2. 我就是我

  3. Process finished with exit code 0


My(China, Us)時,My類中沒有info這個方法,輸出的結(jié)果是你是中國人,默認括號內(nèi)左邊的類優(yōu)先

  1. #!/usr/bin/env python

  2. # _*_ coding:utf-8 _*_

  3. class China:

  4.    def info(self):

  5.        print("你是中國人")

  6. class Us:

  7.    def info(self):

  8.        print("你是美國人")

  9. class My(China, Us):

  10.    pass

  11. c = My()

  12. c.info()

執(zhí)行結(jié)果

  1. C:\Python35\python.exe F:/Python_code/sublime/Week06/Day02/class_01.py

  2. 你是中國人

  3. Process finished with exit code 0

My(China, Us)時,My類中沒有info這個方法,China類中也沒有info這個方法,輸出的結(jié)果是你是美國人

  1. #!/usr/bin/env python

  2. # _*_ coding:utf-8 _*_

  3. class China:

  4.    pass

  5. class Us:

  6.    def info(self):

  7.        print("你是美國人")

  8. class My(China, Us):

  9.    pass

  10. c = My()

  11. c.info()

執(zhí)行結(jié)果

  1. C:\Python35\python.exe F:/Python_code/sublime/Week06/Day02/class_01.py

  2. 你是美國人

  3. Process finished with exit code 0

面向?qū)ο笾^承之多繼承時的查找順序

  • 頂層兩個類沒有父類的情況

  • 頂層兩個類有父類的情況

本文出自 “一盞燭光” 博客,謝絕轉(zhuǎn)載!

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號