1. 程式人生 > >Python筆記(七):字典、類、屬性、對象實例、繼承

Python筆記(七):字典、類、屬性、對象實例、繼承

http 基礎 ima 字符 刪除重復 com 根據 模塊 none

(一) 簡單說明

字典是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‘

, ‘2.34‘, ‘2.22‘, ‘2.01‘]
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筆記(七):字典、類、屬性、對象實例、繼承