Python筆記(七):字典、類、屬性、對象實例、繼承
(一) 簡單說明
字典是Python的內置數據結構,將數據與鍵關聯(例如:姓名:張三,姓名是鍵,張三就是數據)。例如:下面這個就是一個字典
{‘姓名‘: ‘張三‘, ‘出生日期‘: ‘2899-08-12‘, ‘成績‘: [‘3.21‘, ‘3.10‘, ‘3.01‘]}
創建字典、添加數據、訪問字典數據的方式如下:
d = {} #直接用{}創建字典
f = dict()
#通過工廠函數dict()創建字典
#通過下面的方式添加數據
d[‘姓名‘] = ‘張三‘
d[‘出生日期‘] = ‘2899-08-12‘
d[‘成績‘] = [‘3.21‘, ‘3.10‘, ‘3.01‘, ‘2.45‘
print(d)
#通過鍵訪問字典的數據
print(d[‘姓名‘])
print(d[‘出生日期‘])
print(d[‘成績‘])
print(d[‘成績‘][2])
輸出如下所示:
(二) 將列表轉換為字典
(1) 創建一個文件
james2.txt 第一項是姓名,第二項是出生日期,後面的是成績
James Lee,2002-3-14,2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22,2-01,2.01,2:16
(2) 要求
在屏幕上輸出下面格式的字典
{‘姓名‘: ‘James Lee‘, ‘出生日期‘: ‘2002-3-14‘, ‘成績‘: [‘3.21‘, ‘3.10‘, ‘3.01‘]}
(3) 主程序代碼
from FirstPython import the_dict as td
the_james2 = td.chdict(‘F:\Python\Python文件\james2.txt‘)
print(the_james2)
(4) the_dict模塊代碼
def sanitize(time_str):
#傳入字符串,將‘-‘和‘:‘修改為‘.‘並返回,否則直接返回
if ‘-‘ in time_str:
(x,y) = time_str.split(‘-‘,1)
return(x+"."+y)
elif‘:‘ in time_str:
(x,y) = time_str.split(‘:‘,1)
return (x + "." + y)
else:
return(time_str)
def chdict(the_file):
#傳入文件,返回一個字典
d = dict()
with open(the_file) as james_file:
the_list = james_file.readline().strip().split(‘,‘)
#分割數據,返回一個列表
d[‘姓名‘] = the_list.pop(0)
#pop()刪除指定位置的數據項並返回
d[‘出生日期‘] = the_list.pop(0)
d[‘成績‘] = sorted(set([sanitize(t) for t in the_list ]),reverse=True)[0:3]
#set()刪除重復數據並返回一個無序的集合,sorted()排序
return d
(三) 類、屬性、對象實例
簡單的說,類和屬性都是一個抽象的概念,對象實例是一個具體的“存在”。例如:
類:人
屬性:姓名、身高、體重
對象實例:張三、李四
人 指一類東西,身高、姓名、體重 是這類東西都有的屬性,張三、李四指的是具體的某一個人。
(四) 創建類、創建對象實例
class People:
def __init__(self):
說明:上面這部分是必須有的,其中 People是類名,自己自定義,__init__(self)方法控制如何初始化對象,self也是必須有的(這是一個目標標識符,標識當前對象具體是什麽)
舉個例子:
(1) 創建一個類
class People:
def __init__(self,name,date=None,achievement=[]):
# date,achievement有缺省(默認)值
self.name = name
self.date = date
self.achievement = achievement
(2) 創建對象實例
zs = People(‘張三‘)
#創建 name為張三的對象實例
說明:使用zs = People(‘張三‘)時,會自動調用people類的 __init__()方法,其中self = zs,name=’張三’,然後創建一個 name = ‘張三’date=None,achievement=[] 的對象實例zs
(3) 類中可以定義很多方法,不過每個方法的第一個參數都必須是self(沒有設置這個參數,那麽第一參數就會被當做self參數處理)。
例如:
def chdict(self,the_file):
with open(the_file) as new_file:
the_list = new_file.readline().strip().split(‘,‘)
return People(the_list.pop(0),the_list.pop(0),the_list)
def top3(self):
return(sorted(set(self.sanitize(t) for t in self.achievement),reverse=True)[0:3])
(五) 繼承
可以從零開始創建一個新類,也可以繼承已經創建好的類,在這個基礎上新增屬性、方法。
繼承的概念:繼承父類的所有方法及屬性,子類可以新增方法、屬性,也可以重寫父類的方法。簡單的說,比如你繼承了你父親的所有能力及天賦(包括身高、體重等),然後你可以通過學習去掌握更多的能力,繼承自你父親的能力你也可以根據自己的需要去改變(比如:傑出的溝通能力,你父親可能用在商業談判上,你可能想用在泡妞上面)。比喻可能不太形象,請多多包涵。
(1) 通過繼承的方式創建一個類
class PeopleList(list):
def __init__(self):
list.__init__([])
PeopleList(list)新類將派生list類,list.__init__([]) 初始化所派生的類
(2) 舉個例子,下面這個類就能繼承list的所有方法
class PeopleList(list):
def __init__(self,name,date=None,achievement=[]):
list.__init__([])
self.name = name
self.date = date
self.extend(achievement)
可以在編輯器中進行測試:
james = PeopleList(‘james‘)
james.append(5)
print(james)
james.extend([1,2,3])
print(james)
Python筆記(七):字典、類、屬性、對象實例、繼承