1. 程式人生 > >萌新向Python數據分析及數據挖掘 第一章 Python基礎 第九節 類

萌新向Python數據分析及數據挖掘 第一章 Python基礎 第九節 類

script 的區別 return 對象 lec 獲得 favor des 導入

第一章 Python基礎

第九節 類

面向對象編程時,都會遇到一個概念,,python也有這個概念,下面我們通過代碼來深入了解下。

其實類 和函數都是為了節省代碼,有了類的的概念,就可以把相同的代碼寫在父類,子類繼承後就可以直接使用,而且通過選擇對應的父類就可以直接使用對應父類的內容。

創建和使用類

技術分享圖片

技術分享圖片
 1 class Dog(): #認識狗這類東西
 2     def __init__(self, name, age): #狗是肯定有名字和年齡的,是個狗就有,要用戶填寫
 3         self.name = name #拿下來存著
 4         self.age = age #
拿下來存著 5 def sit(self): 6 print(self.name.title() + " is now sitting.")# 培訓可以讓狗坐下 7 def roll_over(self): 8 print(self.name.title() + " rolled over!")# 培訓可以讓狗翻滾 9 10 my_dog = Dog(willie, 6) #買了一個狗,起好名字 11 print("My dog‘s name is " + my_dog.name.title() + ".") #我看看我的狗叫什麽名字
12 print("My dog is " + str(my_dog.age) + " years old.")#我看看我的狗幾歲了
View Code



class關鍵字:來定義一個類。類名通常首字母為大寫。

__init__方法:特殊方法,每當實例類的時候都會運行。其中的形參self必不可少,而且必須位於最前面。

self形參:類的方法與普通的函數只有一個特別的區別——它們必須有一個額外的第一個參數名稱,但是在調用這個方法的時候用不為這個參數賦值,Python會提供這個值。這個特別的變量指對象本身。

實例的方法是指定類名以及需要傳入的實參。

要訪問實例的屬性或者調用方法,可使用句點表示法

使用類和實例

技術分享圖片

技術分享圖片
 1 class Car():#定義一個車子類
 2     def __init__(self, make, model, year): #車子類都得有牌子、型號、制造年份
 3         self.make = make#把用戶輸入的信息存為車子的屬性
 4         self.model = model
 5         self.year = year
 6         self.odometer_reading = 0 #<- here 建立一個新的屬性“裏程表”,不用用戶輸入,默認為0
 7  
 8     def get_descriptive_name(self): # 建立一個函數(方法、外掛)來描述車子
 9         long_name = str(self.year) +   + self.make +   + self.model
10         return long_name.title()
11  
12     def read_odometer(self): # 建立一個函數(方法、外掛)來描述打印車子的裏程表
13         print("This car has " + str(self.odometer_reading) + " miles on it.")
14 "到此就寫了一套方法來對付車這一類東西"
15 my_new_car = Car(audi, a4, 2016)#買新車啦
16 print(my_new_car.get_descriptive_name()) #我來看看我的新車的信息
17 my_new_car.read_odometer()#我來看看我的新車的裏程表
View Code



可以看到,我們給Car類的屬性指定了默認值self.odometer_reading = 0。如果要修改它,我們可以通過實例直接訪問它並修改,比如:my_new_car.odometer_reading = 23。或者通過方法修改屬性的值。或者通過方法對屬性的值進行遞增。

class Car():
    --snip--
    #通過方法修改屬性的值
   
技術分享圖片



繼承

一個類繼承另一個類時,他將自動獲得另一個類的所有屬性和方法;原有的類稱為父類,新類稱為子類。子類繼承了其父類的所有屬性和方法,同時還可以定義自己的屬性和方法。

現在我們有一個Car類如下

技術分享圖片


創建子類實例時,python首先給父類所有屬性賦值。

接下來我們創建新類EleCar

class Car():
    --snip--
 
技術分享圖片



首先父類必須位於子類前面。

super()是一個特殊函數,將父類和子類關聯起來。使得可調用子類的父類的方法__init__(),讓子類包父類的所有屬性。

給子類定義屬性和方法沒有任何限制,比如:

class Car():
    --snip--
 
技術分享圖片


 

技術分享圖片

 1 class ElectricCar(Car):#電車和一般的車還是有區別的,要寫清楚電車的特有的情況怎麽對付
 2     def __init__(self, make, model, year):
 3         super().__init__(make, model, year)
 4         self.battery_size = 70 #電車有電池啊 默認70
 5  
 6     def describe_battery(self): #電車可以看看我的電池多大
 7         print("This car has a " + str(self.battery_size) + "-kWh battery.")
 8  
 9 my_tesla = ElectricCar(tesla, model s, 2016) #買新電車了 
10 print(my_tesla.get_descriptive_name()) #我看看我的新電車的信息
11 my_tesla.describe_battery()# 我看看我新電車的電池信息
View Code

如果需要重寫父類的方法,只需定義一個與重寫的父類方法同名的方法即可。

python還可以使用其他類的實例作為自己類的屬性。

導入類

類似函數,類也可以保存為.py文件形成模塊從而進行導入。

導入單個類: from model_name import class_name

導入一個模塊的多個類: from model_name import class_name1, class_name2

導入一個模塊所有類: from model_name import *

導入整個模塊: import model_name

還可以在一個模塊中導入另一個模塊

python標準庫

其是一組模塊。模塊collections中有一個類OrderedDict。字典的鍵值對沒有順序,但是這個類幾乎和字典相同,區別只在於記錄了鍵值對的順序。

技術分享圖片

技術分享圖片
 1 from collections import OrderedDict 
 2  
 3 favorite_languages = OrderedDict() #除了標簽 還有順序的字典,列表和字典特點的集合
 4  
 5 favorite_languages[jen] = python
 6 favorite_languages[sarah] = c
 7 favorite_languages[edward] = ruby
 8 favorite_languages[phil] = python
 9  
10 for name, language in favorite_languages.items(): #可以按順序一個個抓出來打印
11     print(name.title() + "‘s favorite language is " +language.title() + ".")
View Code


萌新向Python數據分析及數據挖掘 第一章 Python基礎 第九節 類