深入淺析Python的類
面向?qū)ο缶幊虝r(shí),都會(huì)遇到一個(gè)概念,類,python也有這個(gè)概念,下面我們通過代碼來深入了解下。
創(chuàng)建和使用類
class Dog():
def __init__(self, name, age):
self.name = name
self.age = age
def sit(self):
print(self.name.title() + " is now sitting.")
def roll_over(self):
print(self.name.title() + " rolled over!")
my_dog = Dog('willie', 6)
print("My dog's name is " + my_dog.name.title() + ".")
print("My dog is " + str(my_dog.age) + " years old.")
運(yùn)行結(jié)果:
My dog's name is Willie.
My dog is 6 years old.
class關(guān)鍵字:來定義一個(gè)類。類名通常首字母為大寫。
__init__方法:特殊方法,每當(dāng)實(shí)例類的時(shí)候都會(huì)運(yùn)行。其中的形參self必不可少,而且必須位于最前面。
self形參:類的方法與普通的函數(shù)只有一個(gè)特別的區(qū)別——它們必須有一個(gè)額外的第一個(gè)參數(shù)名稱,但是在調(diào)用這個(gè)方法的時(shí)候
用不為這個(gè)參數(shù)賦值,Python會(huì)提供這個(gè)值。這個(gè)特別的變量指對(duì)象本身。
實(shí)例的方法是指定類名以及需要傳入的實(shí)參。
要訪問實(shí)例的屬性或者調(diào)用方法,可使用句點(diǎn)表示法。
使用類和實(shí)例
class Car():
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0 #<- here
def get_descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.get_descriptive_name())
my_new_car.read_odometer()
運(yùn)行結(jié)果:
2016 Audi A4
可以看到,我們給Car類的屬性指定了默認(rèn)值self.odometer_reading = 0。如果要修改它,我們可以通過實(shí)例直接訪問它并修改,比如:my_new_car.odometer_reading = 23?;蛘咄ㄟ^方法修改屬性的值?;蛘咄ㄟ^方法對(duì)屬性的值進(jìn)行遞增。
class Car():
--snip--
#通過方法修改屬性的值
def update_odometer(self, mileage):
self.odometer_reading = mileage
#通過方法對(duì)屬性的值進(jìn)行遞增
def increment_odometer(self, miles):
self.odometer_reading += miles
繼承
一個(gè)類繼承另一個(gè)類時(shí),他將自動(dòng)獲得另一個(gè)類的所有屬性和方法;原有的類稱為父類,新類稱為子類。子類繼承了其父類的所有屬性和方法,同時(shí)還可以定義自己的屬性和方法。
現(xiàn)在我們有一個(gè)Car類如下
class Car():
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0 #<- here
def get_descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
def update_odometer(self, mileage):
self.odometer_reading = mileage
def increment_odometer(self, miles):
self.odometer_reading += miles
創(chuàng)建子類實(shí)例時(shí),python首先給父類所有屬性賦值。
接下來我們創(chuàng)建新類EleCar
class Car():
--snip--
class ElectricCar(Car):
def __init__(self, make, model, year):
super().__init__(make, model, year)
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
運(yùn)行結(jié)果:
2016 Tesla Model S
首先父類必須位于子類前面。
super()是一個(gè)特殊函數(shù),將父類和子類關(guān)聯(lián)起來。使得可調(diào)用子類的父類的方法__init__(),讓子類包父類的所有屬性。
給子類定義屬性和方法沒有任何限制,比如:
class Car():
--snip--
class ElectricCar(Car):
def __init__(self, make, model, year):
super().__init__(make, model, year)
self.battery_size = 70
def describe_battery(self):
print("This car has a " + str(self.battery_size) + "-kWh battery.")
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.describe_battery()
運(yùn)行結(jié)果:
2016 Tesla Model S
This car has a 70-kWh battery.
如果需要重寫父類的方法,只需定義一個(gè)與重寫的父類方法同名的方法即可。
python還可以使用其他類的實(shí)例作為自己類的屬性。
導(dǎo)入類
類似函數(shù),類也可以保存為.py文件形成模塊從而進(jìn)行導(dǎo)入。
導(dǎo)入單個(gè)類:
from model_name import class_name
導(dǎo)入一個(gè)模塊的多個(gè)類:
from model_name import class_name1, class_name2
導(dǎo)入一個(gè)模塊所有類:
from model_name import *
導(dǎo)入整個(gè)模塊:
import model_name
還可以在一個(gè)模塊中導(dǎo)入另一個(gè)模塊
python標(biāo)準(zhǔn)庫
其是一組模塊。模塊collections中有一個(gè)類OrderedDict。字典的鍵值對(duì)沒有順序,但是這個(gè)類幾乎和字典相同,區(qū)別只在于記錄了鍵值對(duì)的順序。
from collections import OrderedDict favorite_languages = OrderedDict() favorite_languages['jen'] = 'python' favorite_languages['sarah'] = 'c' favorite_languages['edward'] = 'ruby' favorite_languages['phil'] = 'python' for name, language in favorite_languages.items(): print(name.title() + "'s favorite language is " + language.title() + ".") 運(yùn)行結(jié)果: Jen's favorite language is Python. Sarah's favorite language is C. Edward's favorite language is Ruby. Phil's favorite language is Python.
- 解決python寫入mysql中datetime類型遇到的問題
- Python 類的特殊成員解析
- Python把csv數(shù)據(jù)寫入list和字典類型的變量腳本方法
- Python基于property實(shí)現(xiàn)類的特性操作示例
- python 基本數(shù)據(jù)類型占用內(nèi)存空間大小的實(shí)例
- Python DataFrame設(shè)置/更改列表字段/元素類型的方法
- Python3實(shí)現(xiàn)的Mysql數(shù)據(jù)庫操作封裝類
- Python面向?qū)ο箢惱^承和組合實(shí)例分析
- Python帶動(dòng)態(tài)參數(shù)功能的sqlite工具類
- python使用RNN實(shí)現(xiàn)文本分類
- Python操作Oracle數(shù)據(jù)庫的簡(jiǎn)單方法和封裝類實(shí)例
相關(guān)文章
python實(shí)現(xiàn)判斷數(shù)組是否包含指定元素的方法
這篇文章主要介紹了python實(shí)現(xiàn)判斷數(shù)組是否包含指定元素的方法,涉及Python中in的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
利用Python實(shí)現(xiàn)自動(dòng)生成小學(xué)生計(jì)算題
過年期間發(fā)現(xiàn)小外甥已經(jīng)上小學(xué)了,我姐說老師今天給他們布置了寒假作業(yè):每天堅(jiān)持做乘法和加減法混合運(yùn)算。這我必須幫幫忙,用Python寫了一段自動(dòng)生成小學(xué)生計(jì)算題的代碼,希望外甥不要太感謝我2023-02-02
Python網(wǎng)絡(luò)編程中urllib2模塊的用法總結(jié)
使用urllib2模塊進(jìn)行基于url的HTTP請(qǐng)求等操作大家也許都比較熟悉,這里我們?cè)偕钊雭砹私庖幌聈rllib2針對(duì)HTTP的異常處理相關(guān)功能,一起來看一下Python網(wǎng)絡(luò)編程中urllib2模塊的用法總結(jié):2016-07-07
利用Python通過獲取剪切板數(shù)據(jù)實(shí)現(xiàn)百度劃詞搜索功能
大家是不是嫌棄每次打開百度太麻煩?今天教大家利用Python通過獲取剪切板數(shù)據(jù)實(shí)現(xiàn)百度劃詞搜索功能,用程序直接打開網(wǎng)頁,需要的朋友可以參考下2021-06-06
python中sys.argv參數(shù)用法實(shí)例分析
這篇文章主要介紹了python中sys.argv參數(shù)用法,實(shí)例分析了python中sys.argv參數(shù)的功能、定義及使用技巧,需要的朋友可以參考下2015-05-05

