思維導(dǎo)圖
- 包粘勒、模塊管理
- 私有的本質(zhì)
- 面向?qū)ο蟮娜筇匦?/li>
- 多繼承的順序問(wèn)題(不提議多繼承)
- 繼承 中的方法重寫(xiě):兩種方式 覆蓋 和擴(kuò)展(super) 其實(shí)沒(méi)多大區(qū)別
- 類(lèi)的屬性糕殉、類(lèi)方法、靜態(tài)方法 實(shí)例屬性和實(shí)例方法
- 單例
- 異常 try except else finally
- 文件
- eval函數(shù)
code
- objects項(xiàng)目
面向?qū)ο?/h1>
內(nèi)置函數(shù) 使用函數(shù)dir()
可查看所有的內(nèi)置變量
舉例說(shuō)明 注意:類(lèi)名和文件名不能一致 否則會(huì)報(bào)錯(cuò)
calss 類(lèi)名:
def func1(self, arg1...):
pass
方法的定義格式幾乎和學(xué)過(guò)的函數(shù)一樣 區(qū)別在于 第一個(gè)參數(shù)必須是 self
創(chuàng)建對(duì)象 對(duì)象變量 = 類(lèi)名()
在init中構(gòu)造的類(lèi)變量會(huì)被pycharm記住, 在使用類(lèi)對(duì)象的時(shí)候會(huì)有提示痕寓,在普通方法中構(gòu)造的變量也會(huì)有提示蠢莺,但是在類(lèi)對(duì)象調(diào)用這個(gè)方法之前使用這個(gè)變量會(huì)報(bào)錯(cuò) 因?yàn)檫@個(gè)變量還沒(méi)有固賦值(此處所說(shuō)的變量是公開(kāi)的寒匙,不是私有的)
python中的私有并非真正的私有, 只是將這個(gè)變量或者方法的名字改掉了 比如我有一個(gè)student類(lèi)躏将,類(lèi)中有一個(gè)__age私有變量锄弱, 那么 在外部使用 stu._student__age
就可以訪(fǎng)問(wèn)到__age這個(gè)變量 私有方法亦是如此
python繼承中,不會(huì)自動(dòng)調(diào)用父類(lèi)的構(gòu)造函數(shù)必須手動(dòng)調(diào)用
def __init__(self):
print("this is __init__ function in subbird")
super(subbird, self).__init__() # 也可以是 super().__init__()
class cat(animal):
def __init__(self):
super().__init__()
print("__init__ in cat class")
- 繼承的方法也是
def eat(self):
print("eat in cat")
super().eat()
- 在子類(lèi)中 即使使用 super()._animal__age 也不能訪(fǎng)問(wèn)到父類(lèi)的私有成員
- python中的類(lèi)屬性和對(duì)象屬性
- 類(lèi)屬性是指 在類(lèi)中定義的屬性
- 對(duì)象屬性是指在構(gòu)造方法中定義的屬性
- 調(diào)用類(lèi)屬性可以使用 類(lèi).屬性 也可以使用對(duì)象.屬性 但是推薦使用類(lèi).屬性
- 注意:當(dāng)給類(lèi)屬性賦值的時(shí)候祸憋,不能使用對(duì)象.屬性 = val 否則會(huì)在對(duì)象中增加一個(gè)屬性 而不是給類(lèi)屬性賦值
class subbird(bird2, bird):
count = 0
__num = 0
def __init__(self):
subbird.count += 1
subbird.__num += 1
print("this is __init__ function in subbird")
super(subbird, self).__init__()
def bark(self):
print("bark in subbird")
super(subbird, self).bark()
sub1 = subbird()
print(subbird.count)
print(subbird._subbird__num)
sub1.count = 100 #
print(sub1.count) # 100
print(subbird.count) # 2
- 類(lèi)方法可以調(diào)用類(lèi)屬性和其他的類(lèi)方法
- 類(lèi)方法的定義
@classmethod
def method1(cls):
pass
- 類(lèi)方法的調(diào)用:
類(lèi)名.類(lèi)方法 類(lèi)對(duì)象.類(lèi)方法
靜態(tài)方法
-
應(yīng)用場(chǎng)景
- 既 不需要 訪(fǎng)問(wèn) 實(shí)例屬性 或者調(diào)用 實(shí)例方法
- 也 不需要 訪(fǎng)問(wèn) 類(lèi)屬性 或者調(diào)用 類(lèi)方法
定義
@staticmethod
def method2():
print("this is static method in people class")
pass
- 調(diào)用
類(lèi)名.靜態(tài)方法
對(duì)象名.靜態(tài)方法
單例模式
new 方法
- 是object的內(nèi)置靜態(tài)方法
- 作用:
- 在內(nèi)存中為對(duì)象分配空間
- 返回對(duì)象的引用
- Python 的解釋器獲得對(duì)象的 引用 后会宪,將引用作為 第一個(gè)參數(shù),傳遞給 init 方法
- 重寫(xiě)方法:
def __new__(cls, *args, **kwargs):
if cls.instance is None:
cls.instance = super().__new__(cls)
return cls.instance
舉例說(shuō)明:
class singlepeople:
instance = None
init_flag = False
def __init__(self):
if not singlepeople.init_flag:
singlepeople.init_flag = True
else:
return
self.name = None
pass
def __new__(cls, *args, **kwargs):
if cls.instance is None:
cls.instance = super().__new__(cls)
return cls.instance
---
from models.singlepeople import singlepeople
p = singlepeople()
print(p)
p.name = "smx"
print(p.name)
p2 = singlepeople()
# p2.name = "xyj"
print(p2)
print(p2.name)
print(p.name)
異常
目標(biāo)
- 異常的概念
- 捕獲異常
- 傳遞異常
- 拋出異常
捕獲異常
- 簡(jiǎn)單的捕獲異常語(yǔ)法
try:
# 提示用戶(hù)輸入一個(gè)數(shù)字
num = int(input("請(qǐng)輸入數(shù)字:"))
except:
print("請(qǐng)輸入正確的數(shù)字")
- 錯(cuò)誤類(lèi)型捕獲
- 語(yǔ)法
try:
# 嘗試執(zhí)行的代碼
pass
except 錯(cuò)誤類(lèi)型1:
# 針對(duì)錯(cuò)誤類(lèi)型1蚯窥,對(duì)應(yīng)的代碼處理
pass
except 錯(cuò)誤類(lèi)型2:
# 針對(duì)錯(cuò)誤類(lèi)型2掸鹅,對(duì)應(yīng)的代碼處理
pass
except (錯(cuò)誤類(lèi)型3, 錯(cuò)誤類(lèi)型4):
# 針對(duì)錯(cuò)誤類(lèi)型3 和 4,對(duì)應(yīng)的代碼處理
pass
except Exception as result:
# 打印錯(cuò)誤信息
print(result)
else:
# 沒(méi)有異常才會(huì)執(zhí)行的代碼
pass
finally:
# 無(wú)論是否有異常拦赠,都會(huì)執(zhí)行的代碼
print("無(wú)論是否有異常巍沙,都會(huì)執(zhí)行的代碼")
- 舉例:
try:
num = int(input("請(qǐng)輸入整數(shù):"))
result = 8 / num
print(result)
except ValueError:
print("請(qǐng)輸入正確的整數(shù)")
except ZeroDivisionError:
print("除 0 錯(cuò)誤")
except Exception as result:
print("未知錯(cuò)誤 %s" % result)
else:
print("正常執(zhí)行")
finally:
print("執(zhí)行完成,但是不保證正確")
拋出異常
- 代碼
# 1> 創(chuàng)建異常對(duì)象 - 使用異常的錯(cuò)誤信息字符串作為參數(shù)
ex = Exception("密碼長(zhǎng)度不夠")
# 2> 拋出異常對(duì)象
raise ex
模塊和包
目標(biāo)
- 模塊
- 包
- 發(fā)布模塊
模塊
- 模塊是 Python 程序架構(gòu)的一個(gè)核心概念
- 每一個(gè)以擴(kuò)展名 py 結(jié)尾的 Python 源代碼文件都是一個(gè) 模塊
- 模塊名 同樣也是一個(gè) 標(biāo)識(shí)符荷鼠,需要符合標(biāo)識(shí)符的命名規(guī)則
- 在模塊中定義的 全局變量 句携、函數(shù)、類(lèi) 都是提供給外界直接使用的 工具
- 模塊 就好比是 工具包允乐,要想使用這個(gè)工具包中的工具矮嫉,就需要先 導(dǎo)入 這個(gè)模塊
導(dǎo)入模塊
- import 導(dǎo)入
import module
import module as md
- from import 導(dǎo)入
from module import *
-
模塊搜索順序
-
原則
包
發(fā)布模塊
文件
目標(biāo)
- 文件
- 文件操作
- 文件、文件夾的常用操作
- 文本文件的編碼方式
文件讀寫(xiě)
文件目錄常用操作
文件的編碼格式
eval函數(shù)
教程筆記圖
-
初始化方法
-
內(nèi)置函數(shù) 使用函數(shù)dir()
可查看所有的內(nèi)置變量
舉例說(shuō)明 注意:類(lèi)名和文件名不能一致 否則會(huì)報(bào)錯(cuò)
calss 類(lèi)名:
def func1(self, arg1...):
pass
方法的定義格式幾乎和學(xué)過(guò)的函數(shù)一樣 區(qū)別在于 第一個(gè)參數(shù)必須是 self
創(chuàng)建對(duì)象 對(duì)象變量 = 類(lèi)名()
在init中構(gòu)造的類(lèi)變量會(huì)被pycharm記住, 在使用類(lèi)對(duì)象的時(shí)候會(huì)有提示痕寓,在普通方法中構(gòu)造的變量也會(huì)有提示蠢莺,但是在類(lèi)對(duì)象調(diào)用這個(gè)方法之前使用這個(gè)變量會(huì)報(bào)錯(cuò) 因?yàn)檫@個(gè)變量還沒(méi)有固賦值(此處所說(shuō)的變量是公開(kāi)的寒匙,不是私有的)
python中的私有并非真正的私有, 只是將這個(gè)變量或者方法的名字改掉了 比如我有一個(gè)student類(lèi)躏将,類(lèi)中有一個(gè)__age私有變量锄弱, 那么 在外部使用 stu._student__age
就可以訪(fǎng)問(wèn)到__age這個(gè)變量 私有方法亦是如此
python繼承中,不會(huì)自動(dòng)調(diào)用父類(lèi)的構(gòu)造函數(shù)必須手動(dòng)調(diào)用
def __init__(self):
print("this is __init__ function in subbird")
super(subbird, self).__init__() # 也可以是 super().__init__()
class cat(animal):
def __init__(self):
super().__init__()
print("__init__ in cat class")
def eat(self):
print("eat in cat")
super().eat()
- 類(lèi)屬性是指 在類(lèi)中定義的屬性
- 對(duì)象屬性是指在構(gòu)造方法中定義的屬性
- 調(diào)用類(lèi)屬性可以使用 類(lèi).屬性 也可以使用對(duì)象.屬性 但是推薦使用類(lèi).屬性
- 注意:當(dāng)給類(lèi)屬性賦值的時(shí)候祸憋,不能使用對(duì)象.屬性 = val 否則會(huì)在對(duì)象中增加一個(gè)屬性 而不是給類(lèi)屬性賦值
class subbird(bird2, bird):
count = 0
__num = 0
def __init__(self):
subbird.count += 1
subbird.__num += 1
print("this is __init__ function in subbird")
super(subbird, self).__init__()
def bark(self):
print("bark in subbird")
super(subbird, self).bark()
sub1 = subbird()
print(subbird.count)
print(subbird._subbird__num)
sub1.count = 100 #
print(sub1.count) # 100
print(subbird.count) # 2
@classmethod
def method1(cls):
pass
類(lèi)名.類(lèi)方法 類(lèi)對(duì)象.類(lèi)方法
應(yīng)用場(chǎng)景
- 既 不需要 訪(fǎng)問(wèn) 實(shí)例屬性 或者調(diào)用 實(shí)例方法
- 也 不需要 訪(fǎng)問(wèn) 類(lèi)屬性 或者調(diào)用 類(lèi)方法
定義
@staticmethod
def method2():
print("this is static method in people class")
pass
類(lèi)名.靜態(tài)方法
對(duì)象名.靜態(tài)方法
- 在內(nèi)存中為對(duì)象分配空間
- 返回對(duì)象的引用
- Python 的解釋器獲得對(duì)象的 引用 后会宪,將引用作為 第一個(gè)參數(shù),傳遞給 init 方法
def __new__(cls, *args, **kwargs):
if cls.instance is None:
cls.instance = super().__new__(cls)
return cls.instance
class singlepeople:
instance = None
init_flag = False
def __init__(self):
if not singlepeople.init_flag:
singlepeople.init_flag = True
else:
return
self.name = None
pass
def __new__(cls, *args, **kwargs):
if cls.instance is None:
cls.instance = super().__new__(cls)
return cls.instance
---
from models.singlepeople import singlepeople
p = singlepeople()
print(p)
p.name = "smx"
print(p.name)
p2 = singlepeople()
# p2.name = "xyj"
print(p2)
print(p2.name)
print(p.name)
try:
# 提示用戶(hù)輸入一個(gè)數(shù)字
num = int(input("請(qǐng)輸入數(shù)字:"))
except:
print("請(qǐng)輸入正確的數(shù)字")
try:
# 嘗試執(zhí)行的代碼
pass
except 錯(cuò)誤類(lèi)型1:
# 針對(duì)錯(cuò)誤類(lèi)型1蚯窥,對(duì)應(yīng)的代碼處理
pass
except 錯(cuò)誤類(lèi)型2:
# 針對(duì)錯(cuò)誤類(lèi)型2掸鹅,對(duì)應(yīng)的代碼處理
pass
except (錯(cuò)誤類(lèi)型3, 錯(cuò)誤類(lèi)型4):
# 針對(duì)錯(cuò)誤類(lèi)型3 和 4,對(duì)應(yīng)的代碼處理
pass
except Exception as result:
# 打印錯(cuò)誤信息
print(result)
else:
# 沒(méi)有異常才會(huì)執(zhí)行的代碼
pass
finally:
# 無(wú)論是否有異常拦赠,都會(huì)執(zhí)行的代碼
print("無(wú)論是否有異常巍沙,都會(huì)執(zhí)行的代碼")
try:
num = int(input("請(qǐng)輸入整數(shù):"))
result = 8 / num
print(result)
except ValueError:
print("請(qǐng)輸入正確的整數(shù)")
except ZeroDivisionError:
print("除 0 錯(cuò)誤")
except Exception as result:
print("未知錯(cuò)誤 %s" % result)
else:
print("正常執(zhí)行")
finally:
print("執(zhí)行完成,但是不保證正確")
# 1> 創(chuàng)建異常對(duì)象 - 使用異常的錯(cuò)誤信息字符串作為參數(shù)
ex = Exception("密碼長(zhǎng)度不夠")
# 2> 拋出異常對(duì)象
raise ex
import module
import module as md
from module import *
模塊搜索順序
原則
初始化方法