萌新向Python數據分析及數據挖掘 第一章 Python基礎 第九節 類
第一章 Python基礎
第九節 類
面向對象編程時,都會遇到一個概念,類,python也有這個概念,下面我們通過代碼來深入了解下。
其實類 和函數都是為了節省代碼,有了類的的概念,就可以把相同的代碼寫在父類,子類繼承後就可以直接使用,而且通過選擇對應的父類就可以直接使用對應父類的內容。
創建和使用類
1 class Dog(): #認識狗這類東西 2 def __init__(self, name, age): #狗是肯定有名字和年齡的,是個狗就有,要用戶填寫 3 self.name = name #拿下來存著 4 self.age = age #View Code拿下來存著 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.")#我看看我的狗幾歲了
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基礎 第九節 類