程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python 基礎知識-day10(面向對象)

編輯:Python

1、面向對象的概念

擁有共同屬性的一類進行歸類的過程叫做面向對象。

2、注意事項

class定義類的時候,類名的首字母必須大寫

3、面向對象案例

 1 class Person(object):
2 def __init__(self,name,age): #name,age可以理解為類的屬性;init為初始化;類裡定義的函數稱為構造方法/構造函數
3 self.name=name #實例屬性
4 self.age=age
5 print("start")
6 def __del__(self): #清理操作
7 print("end")
8 def show(self): #self為類本身,不可省略
9 print("name:{0},age:{1}".format(self.name,self.age))
10 obj=Person(name="wuya",age=18) #要調用類裡邊的變量、方法函數等,首先需要對類進行實例化;obj是類Person()實例化後的對象,類實例化的過程也是類初始化的過程。類的實例化過程也是針對構造方法初始化的過程(等於調用了__init__的方法)
11 obj.show()
12 #Person(name="wuya",age=18).show() #用類名調用方法

以上代碼運行的結果為:

4、類中方法的執行順序:初始化方法->具體的方法->清理的方法

5、面向對象的特性

1)封裝

a.實例屬性

b.數據屬性(類中的變量)

2)繼承

3)多態

6、方法:

a.普通方法:屬於對象,也屬於類,只能讀寫;

b.特性方法:屬於對象,只具備讀屬性,方法不能有形式參數;

c.靜態方法:屬於類,只能用類名來調用,一般把數據屬性使用靜態方法來處理

7、封裝入門實例

 1 class Animal(object):
2 def __init__(self,age):
3 self.age=age
4 def getAge(self):
5 return self.age
6 def setAge(self,age):
7 if age>10 and age<100:
8 self.age=age #允許修改年齡
9 else:
10 print("年齡錯誤")
11 objAnimal=Animal(age=25) #類的實例化
12 print(objAnimal.getAge()) #輸出獲取年齡的方法的調用結果
13 objAnimal.setAge(age=11) #調用修改年齡的方法
14 print(objAnimal.getAge()) #輸出獲取年齡的方法的調用結果

8、封裝的進階實例

 1 class Animal(object):
2 address="地球" #數據屬性
3 def __init__(self,age):
4 self.age=age #實例屬性
5 # @staticmethod
6 def address(self): #靜態方法,數據屬性使用靜態方法來處理
7 return "地球"
8 def show(self,name="*"): #普通方法,可讀寫
9 print("it come from {0},and it's age is {1},and it's name is {2}".format(self.address(),self.age,name))
10 def func(self,**kwargs):
11 print(kwargs)
12 @property
13 def info(self): #特性方法,只讀(只有輸出)
14 print("hello world")
15 @property
16 def getAge(self): #特性方法,只讀(只有返回)
17 return self.age
18 objAnimal=Animal(age=30) #類的實例化
19 objAnimal.show() #調用普通方法
20 #objAnimal.show(name="monkey")
21 # Animal().show(name="monkey")
22 # Animal(age=10).address()
23 objAnimal.func(name="cch",age=18,city="西安")
24 objAnimal.info #特性方法調用
25 print(Animal.address(""))
26 print(objAnimal.age)

 9、繼承

1)概念

父類(基類):被繼承的類

子類(派生類):繼承其他的類

2)Java和Python繼承的區別

Java是單繼承的,Python是多繼承的

3)子類繼承父類的什麼:

a、變量(數據屬性)

b、實例屬性

c、方法

3)方法重寫

當父類的方法沒有辦法滿足子類的需求的時候,子類就會重寫父類的方法,那麼子類實例化後的對象調用該方法,優先考慮的是子類的方法。

 1 class Father(object):
2 address="西安"
3 def __init__(self,name,age):
4 self.name=name
5 self.age=age
6 def info(self):
7 print("this is a father's method")
8 class Son(Father):
9 def __init__(self,name,age,score):
10 Father.__init__(self,name,age) #子類繼承了父類的實例屬性
11 self.score=score
12 def show(self):
13 print("name is {0},and age is {1},and score is {1}".format(self.name,self.age,self.score))
14 def info(self): #父類的方法重寫
15 print("this is a son's method")
16 son=Son(name="wuya",age=18,score=99)
17 son.show()
18 print(son.address) #子類繼承了父類的變量(數據屬性)
19 son.info() #不用print,info()中有print,函數與返回值時,輸出函數為空。子類重寫父類的方法,那麼子類實例化後的對象調用該方法,優先考慮的是子類的方法。

以上代碼運行的結果為:

 10、繼承順序

1)從上到下(前提條件):

a.單個繼承

b.子類重寫了父類的方法

2)從左到右(前提條件):子類繼承多個類(子類可以繼承多個父類,但父類之間必須是同級關系。)

3)所以在Python中,基於MRO的解析順序規則,就會從左到右開始查找基類,如果找到第⼀個匹配的屬性類,就會停⽌查找,如果沒有,那就繼續查找,直到查找到符合要

求的為止。MRO其實就是通過⼀個C3線性化算法來實現的,它的核心思想為:

子類會優於父類檢查

多個父類會根據他們在列表中的順序被依次檢查

如果對下一個類存在兩個合法的選擇,只能選擇第一個(線性查找)

11、繼承順序示例

 1 class Father(object):
2 def __init__(self,name,age):
3 self.name=name
4 self.age=age
5 def funM(self):
6 print("father")
7
8 class Mother(object):
9 def funM(self):
10 print("mother")
11
12 class Son(Father,Mother): #子類Son繼承了兩個父類
13 def __init__(self,name,age,score):
14 Father.__init__(self,name,age) #子類Son繼承了父類Father和Mother的實例屬性
15 self.score=score
16
17 son=Son(name="ccj",age=18,score=100)
18 son.funM()
19 print(Son.mro()) #使用類名調用mro,查看類的執行順序

以上代碼的執行結果為:

12、子類繼承多個非同級的父類錯誤示例

 1 class Person(object):
2 pass
3
4 class Father(Person):
5 def __init__(self):
6 pass
7 def funM(self):
8 print("father")
9 class Mother(object):
10 def funM(self):
11 print("mother")
12
13 class Son(Person,Father): #子類繼承的多個父類不是同一級,代碼會報錯,z子類可以繼承多個父類,但父類之間必須是同級關系。
14 def __init__(self,score): 15 Father.__init__(self) 16 self.score=score 17 son=Son(score=90) 18 son.funM() 19 print(Son.mro())

以上代碼的運行結果為;

 13、繼承方法調用錯誤示例

 1 class Person(object):
2 pass
3
4 class Father(Person):
5 def __init__(self):
6 pass
7
8 class Mother(Person):
9 def funM(self):
10 print("mother")
11
12 class Son(Father): #子類繼承的父類中沒有funM方法,代碼會報錯
13 def __init__(self,score):
14 Father.__init__(self)
15 self.score=score
16
17 son=Son(score=99)
18 son.funM()

以上代碼的運行結果為:

14、繼承方法調用錯誤示例糾正

 1 class Person(object):
2 def funM(self):
3 print("person")
4
5 class Father(Person):
6 def __init__(self):
7 pass
8
9 class Mother(Person):
10 def funM(self):
11 print("mother")
12
13 class Son(Father): #子類繼承法的父類是Father
14 def __init__(self,score):
15 Father.__init__(self)
16 self.score=score
17
18 son=Son(score=99)
19 son.funM() #子類調用方法,先從子類中查找,再從繼承的父類查找,若未找到,再從父類的父類中查找。
20 print(Son.mro())

以上方法的運行結果為:

15、繼承歷史問題

python2是深度優先,python3是廣度優先

 1 class A:
2 def show(self):
3 print('A')
4
5 class B(A):
6 pass
7
8 class C(A):
9 def show(self):
10 print('C')
11
12 class D(B,C):
13 pass
14
15 if __name__ == '__main__':
16 obj=D()
17 obj.show() #python2執行的結果是A,pyhton3中的運行結果為C

16、多態

多太的優勢具體可以總結為如下幾點,具體為:

增加了持續的靈活性

增加了持續的額外擴展功能

 1 class Animal(object):
2 def talk(self):
3 print("動物會叫")
4
5 class Dog(object):
6 def talk(self):
7 print("狗也會叫")
8
9 class Cat(object):
10 def talk(self):
11 print("貓也會叫")
12
13 def func(animal):
14 animal.talk()
15 if __name__ == '__main__':
16 dog=Dog()
17 func(animal=dog)

以上代碼的運行結果為:

python 基礎知識-day10(面向對象)的更多相關文章

  1. Python開發【第二篇】:Python基礎知識

    Python基礎知識 一.初識基本數據類型 類型: int(整型) 在32位機器上,整數的位數為32位,取值范圍為-2**31-2**31-1,即-2147483648-2147483647 在64位 ...

  2. python 基礎知識(一)

    python 基礎知識(一) 一.python發展介紹 Python的創始人為Guido van Rossum.1989年聖誕節期間,在阿姆斯特丹,Guido為了打發聖誕節的無趣,決心開發一個新的腳本 ...

  3. python基礎知識小結-運維筆記

    接觸python已有一段時間了,下面針對python基礎知識的使用做一完整梳理:1)避免‘\n’等特殊字符的兩種方式: a)利用轉義字符‘\’ b)利用原始字符‘r’ print r'c:\now' ...

  4. Python基礎知識(Basic knowledge)

    Python基礎知識(Basic knowledge) 1.認識Python&基礎環境搭建 2.Python基礎(上) 3.Python基礎(中) 4.Python基礎(下) 5.Python ...

  5. python基礎知識的學習和理解

    參考鏈接:https://github.com/yanhualei/about_python/tree/master/python_learning/python_base   python基礎知識筆 ...

  6. python基礎知識(二)

    以下內容,作為python基礎知識的補充,主要涉及基礎數據類型的創建及特性,以及新數據類型Bytes類型的引入介紹

  7. python基礎知識講解——@classmethod和@staticmethod的作用

    python基礎知識講解——@classmethod和@staticmethod的作用 在類的成員函數中,可以添加@classmethod和@staticmethod修飾符,這兩者有一定的差異,簡單來 ...

  8. python爬蟲主要就是五個模塊:爬蟲啟動入口模塊,URL管理器存放已經爬蟲的URL和待爬蟲URL列表,html下載器,html解析器,html輸出器 同時可以掌握到urllib2的使用、bs4(BeautifulSoup)頁面解析器、re正則表達式、urlparse、python基礎知識回顧(set集合操作)等相關內容。

    本次python爬蟲百步百科,裡面詳細分析了爬蟲的步驟,對每一步代碼都有詳細的注釋說明,可通過本案例掌握python爬蟲的特點: 1.爬蟲調度入口(crawler_main.py) # coding: ...

  9. python 爬蟲與數據可視化--python基礎知識

    摘要:偶然機會接觸到python語音,感覺語法簡單.功能強大,剛好朋友分享了一個網課<python 爬蟲與數據可視化>,於是在工作與閒暇時間學習起來,並做如下課程筆記整理,整體大概分為4個 ...

  10. Python基礎知識(五)

    # -*- coding: utf-8 -*-# @Time : 2018-12-25 19:31# @Author : 三斤春藥# @Email : [email protected]# @Fi ...

隨機推薦

  1. extjs簡單動畫2

    var store = Ext.create('Ext.data.Store', { storeId:'employeeStore', fields:['name', 'seniority', 'de ...

  2. Redis 四:存儲類型之有序集合

    有序集合似乎更大的操作是由於加了一個叫做“分子”的東西 事實上就好像普通的數據,只是為這個數據加了一個純數字的標識, 通過操作這些標識來得到我們想要的數據! 分子可以是整形,也可以是雙精度浮點型: = ...

  3. UVa 400 Unix Is

    題意:給出n個字符串,按照字典序排列,再按照規則輸出. ===學習的紫書,題目意思很清楚,求列數和行數最開始看的時候木有看懂啊啊啊 列數:即為(60-M)/(M+2)+1;即為先將最後那一列減去,算普 ...

  4. Linux - 快速進入目錄的方法

    cd命令技巧 直接進入用戶的home目錄: cd ~ 進入上一個目錄: cd - 進入當前目錄的上一層目錄: cd .. 進入當前目錄的上兩層目錄: cd ../.. 其他常用方法 利用tab鍵,自動 ...

  5. 【bzoj3218】a+b Problem 最小割+主席樹

    數據范圍:$n≤5000$,$a,l,r≤10^9$,$b,w,p≤2\times 10^5$. 我們考慮一種暴力的最小割做法: 首先令$sum=\sum\limits_{i=1}^{n} b_i+w ...

  6. [轉] HBase異常:hbase-default.xml file seems to be for an old version of HBase

    [From] https://blog.yoodb.com/yoodb/article/detail/157 使用HBase Java Client連接HBase服務端創建Configuration對 ...

  7. 洛谷P2831 憤怒的小鳥

    洛谷P2831 憤怒的小鳥 原題鏈接 題解 首先簡單數學公式送上. \(ax_1^2+bx_1=y_1\) \(ax_2^2+bx_2=y_2\) \(ax_1^2x_2+bx_1x_2=y_1x_2 ...

  8. xdebug常用配置

    ;指定xdebug文件 zend_extension = "F:\tools\develop_tools\php\php_xdebug-2.2.2-5.4-vc9.dll" ;xd ...

  9. 北京Uber優步司機獎勵政策(11月16日~11月22日)

    用戶組:人民優步“關羽組”(適用於11月16日-11月22日)獎勵政策: 滴快車單單2.5倍,注冊地址:http://www.udache.com/ 如何注冊Uber司機(全國版最新最詳細注冊流程)/ ...

  10. .NET C#生成隨機顏色,可以控制亮度,生成暗色或者亮色 基於YUV模式判斷顏色明亮度

    .NET C#生成隨機顏色,可以控制亮度,生成暗色或者亮色 基於YUV模式判斷顏色明亮度   隨機顏色在日常開發中很常用到,有時候要控制顏色明亮度,比如在白色背景網頁上的隨機顏色,一般要求顏色稍微暗一 ...


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved