python筆記day-12-類和對象01

昨天回顧

一、json數據

1.json數據:a.只有一個數據 b.數據類型是json支持的類型

2.json數據轉python

json.load(文件對象)

json.loads(字符串)

3.python數據轉json

json.dump(數據,文件對象)

json.dumps(數據) - 字符串

json.dumps('abc')? --> '"abc"'

json.dumps([1,2,'aaa']) --> '[1,2,"abc"]'

二、異常捕獲

try - except? --? 捕獲所有異常

try - except 錯誤類型? ---? 捕獲一個指定異常

try - except (錯誤類型1, 錯誤類型2 ...)? ---? 捕獲多個指定異常

try - except 錯誤類型1 - except 錯誤類型2 ...? --- 捕獲多個指定異常

finally? -? 不管try后面代碼有沒有異常,異常是否能夠捕獲,都會執行

三、拋出異常

raise 異常類型? -- 讓程序主動報錯

異常類型 - 必須是 Exception的子類

一、編程思想

編程思想:

1、面向過程編程 - 邏輯、算法

遇到問題,考慮直接把邏輯思維轉換成代碼,解決問題

2、函數式編程 - 函數

遇到問題,就考慮是否有一個這種功能的函數

3、面向對象編程 - 類和對象

遇到問題,就考慮是否有一個對象能夠幫我解決問題

二、類和對象

1、定義

類: 就是擁有相同屬性和相同功能的對象的集合(類是抽象的)

對象:類的實例(對象是具體的)

2、從生活的角度考慮的對象

如果“人”是一個類,余婷是一個對象,羅老師也是一個對象

如果電腦是一個類,我桌上的電腦就是一個對象

三、類的聲明

類: 就是擁有相同屬性和相同功能的對象的集合(類是抽象的)

對象:類的實例(對象是具體的)

1、類的聲明

語法:

class 類名(父類列表):

類的內容

說明:

class - 聲明類的關鍵字

類名 - 標識符,不能是關鍵字;

采用駝峰式命名;并且首字母大寫;

見名知義

父類列表 - 繼承語法:可以省略,省略的時候相當于(bojct)

類的內容 - 主要包含類的屬性和方法

補:駝峰式命名:名字由多個單詞組成,通過單詞首字母大寫來區分不同的單詞

方法:聲明類中的函數就是方法

class person:

"""人類"""

pass

2、類的屬性和方法

類的屬性:類中的屬性值的是在類中聲明的變量;分為類的字段和對象屬性

類中的方法:指的是在類中聲明的函數;分為對象方法,類方法和靜態方法

class Person:

"""人類"""

pass

#屬性

num = 61

#方法

def eat(self):

print("人在吃飯")

Person是一個類(類就是類型)

3、創建對象

類名() -- 創建類的對應的對象

#創建 Person類的對象xiao_ming

xiao_ming = Person()

print(xiao_ming)

四、對象方法

1、什么是對象方法

直接聲明在類中,并且自帶一個叫self的參數的函數

2、對象方法的調用 - 通過對象調用對象方法

對象.對象方法()

3、self(當前對象)

通過對象調用對象方法的時候,對象方法中的第一個參數self不用傳參,

系統會自動將當前對象傳給self。

哪個對象調用的,self就指向誰。

注意:當前類的對象能做的事情,self都能做

#聲明類Person

class Person:

"""人類"""

# 聲明了一個對象方法sleep

def sleep(self):

print("睡覺!")

# 創建Person的對象p1

p1 = Person()

p1.sleep()

五、init方法和構造方法

0、魔法方法

python類中,用__開頭并且是__結尾的方法,就是魔法方法。

魔法方法不需要主動調用,都是自動調用。

1、__init__方法

a.是對象方法

b.不需要自己調用,會被自動調用

c.專門用來對對象進行初始化的

2、構造方法

概念:函數名和類名一樣的函數,就是構造方法。

當我們創建類的時候,系統會自動創建這個類的構造方法,用來創建對象。

當我們同構構造方法創建對象的時候,系統會自動調用init方法來對創建好的對象進行初始化

注意:當init方法中除了self意外如果需要別的參數,那么這些參數是通過構造方法來傳的參

只要調用了構造方法,就會產生新的對象。(想要對象,調用構造方法)

class Person:

def __init__(self):

print("init方法")

模擬構造方法和init方法

def __init__(a,b):

print("自己實現",a,b)

def func1(*args,**kwargs):

print("創建對象")

__init__(*args,**kwargs)

print("放回對象")

六、對象屬性

1、什么是對象屬性

a.聲明在init方法中

b.self.屬性名 = 值

c.通過對象使用:對象.屬性

語法:

self.變量名 = 值

說明:變量名就是屬性名,這個變量就是對象屬性

2、什么的屬性應該聲明稱對象屬性

如果屬性的值會因為對象不同而不一樣,那這樣的屬性就應該聲明成對象屬性。反之就聲明稱類的字段

七、對象屬性的增刪改查

1、查(獲取對象屬性的值)

獲取指定對象指定的屬性

a.對象.屬性? ---? 屬性不存在的時候會報錯

b.getattr(對象,屬性,默認值) --- 屬性不存在的時候,如果設置了默認值,程序不崩潰,而是返回默認值

2、增、改

a.對象.屬性 = 值

b.setattr(對象,屬性名,值)

注意:屬性存在的時候,對應的功能是修改屬性的值。當屬性不存在的時候是添加屬性

3、刪除

a. del 對象.屬性

b. delattr(對象,屬性名)

注意:對象屬性的增刪改查,都是針對指定的那一個對象,不會影響其他

4、slots魔法

slots是用來約束當前這個類有哪些對象屬性

class Student:

# Student類的對象只能有name,study_id,age和sex屬性

__slots__ = ('name', 'study_id', 'age', 'sex')

def __init__(self, name, age):

self.name = name

self.study_id = '001'

self.age = age

self.sex = '男'

八、類的字段和內置類屬性

1、類的字段

a.直接聲明在類里面,函數的瓦面的變量就是類的字段

b.類的字段需要通過類來使用 : 類.字段 - 不管是字類里面還是在類的外面都一樣

不會因為對象不同而不一樣的數據就聲明稱類的字段

calss Person:

#聲明一個字段number

number = 61

2、內置類屬性

內置屬性就是聲明類的時候,類中已經聲明好的屬性(包含類的字段和對象屬性)

a.__name__

類.__name__? - 獲取類的名字(字符串)

b.__class__? - 獲取對象對應的類(結果是一個類,原來類能做的事情它都可以做)

對象.__class__

c.__ dict __

(了解)類.__ dict __ - 獲取當前類的所有的類的字段及其對應的值

(重點)對象.__ dict _ - 將當前對象所有的對象屬性及其值轉換成字典,key是屬性名,value是屬性的值

d.__base__

類.__base__ - 獲取當前類的父類(以元組的形式返回,元組中的元素就是類的父類)

e.__module__

類.__module__? - 獲取當前類所在的模塊的模塊名

f.__doc__

類.__doc__? - 獲取類的說明文檔

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容