一、內容回顧 面向對象 單例模塊 單例模塊:設計模式 單例的應用場景 logging模塊 記錄日誌的 記錄錯誤、操作日誌 給程式員看的:①統計使用;②用來做故障排除的(debug);③記錄錯誤,完成優化代碼的。 logging.basicconig:①使用方便,②不能實現,編碼問題;不能同時向文件和 ...
一、內容回顧
面向對象
類變數
方法
:靜態方法
:類方法
:綁定方法
:屬性property
單例模塊
單例模塊:設計模式
單例的應用場景
__new__(self):實例創建,在init之前工作
logging模塊
記錄日誌的
記錄錯誤、操作日誌
給程式員看的:①統計使用;②用來做故障排除的(debug);③記錄錯誤,完成優化代碼的。
logging.basicconig:①使用方便,②不能實現,編碼問題;不能同時向文件和屏幕上輸出。
logging.debug,logging.warning
logger對象:
複雜: ①創建一個logger對象; ②創建一個文件操作符; ③創建一個屏幕操作符; ④創建一個格式; 給logger對象綁定文件操作符 給logger對象綁定屏幕操作符 給文件操作符設定格式 給屏幕操作符設定格式 用logger對象來操作。 import logging logger=logging.getLogger() fh=logging.FileHandler('log.log') sh=logging.StreamHandler() logger.addHandler(fh) logger.addHandler(sh) formatter=logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s') sh.setFormatter(formatter) fh.setFormatter(formatter) logger.warning('message')
collections模塊
from collections import OrderedDict
odic=OrderedDict([('a',1),('b',2),('c',3)])
print(odic)
# # odic['k']='k1'
# # odic['k1']='k2'
for k,v in odic.items():
print(k,v)
#模塊namedtuple
#創建一個類,這個類沒有辦法,所有屬性的值都不能修改
from collections import namedtuple
Course=namedtuple('course',['name','price','teacher'])
python=Course('python',1980,'lexm')
print(python)
print(python.name)
=======================
course(name='python', price=1980, teacher='lexm')
python
====
只讀屬性:t屬性不能修改
import time
t=time.localtime()
print(t)
項目開發規範
補充
- 棧:Stack,先進先出,lifo
- 隊列:Queue,先進先出是隊列,fifo
反射
hasattr
setattr
getattr
class A:
@staticmethod
def func():
print('12345')
getattr(A,)
delattr
通過對象來獲取實例變數、綁定方法
通過類 來獲取類變數,類方法、靜態方法
通過模塊名來獲取模塊中的任意變數(普通變數,函數,類)
通過文本件來獲取本文件中的任意變數。
getttr(sys.modules[__name__],'變數名')
抽象類/介面類
就是給子類一個規範,讓子類必須按照抽象類的規範實現方法。
class Foo:
def func(self):
raise NotImplementedError
class Son(Foo):
pass
s=Son()
s.func()
模塊和包
模塊:py文件寫好了的,對程式員直接提供某方面功能的文件。
import,from import
什麼是包:
文件夾,存儲多個py文件的文件夾。
如果導入的是一個包的化,這個包里的模塊預設是不能用的。
需要完成__init__.py文件的內容。
導入一包相當於執行init.py文件中的內容。
項目規範
bin start
#import os,sys
#base_path=os.path.dirname(os.path.dirname(__file__))#當前文件
#sys.path.append(base_path)
#from src import core
conf setting
src 業務邏輯
student.py
from src import core
core.py
from conf import settings
db 數據文件
lib 擴展文件
log 日誌文件
模塊總結
os:操作系統(作業:計算文件夾大小,考慮絕對路徑)
os.path.getsize('d:\code\s21')
#文件
#文件
#路徑
#listdir,walk
sys
#sys.path 模塊搜索路徑,一個模塊是否能被導入,全看sys.path中是否有這個模塊所在的路徑。
#sys.argv,獲取命令行參數,python c://aaa.py remove 文件路徑
#sys.module,存儲了當前程式中用到的所有模塊,反射文件中內容。
json,支持所有語言
#序列化,將其他類型轉換成str/bytes類型
#json格式:
#1所有的字元串都是雙引號
#2最外層只能是列表或者字典
#3只支持int float str list dict bool
#4存在字典的key只能是str
#5不能連續load多次
pickle,只支持py
#1所有的數據類型都可以寫到文件中
#2支持連續load多次
random(作業,發紅包,沒一個人搶到金額概率一樣,共計200元,小數的不准確性(print(random.uniform(1,5)))
import random
random.choice([1,2,3,4])#隨機抽取一個
random.sample([1,2,3,4,5],3)#抽取多個
#randint
#choice
#sample
#shuffle,洗牌,演算法
time
#time時間戳
#sleep()讓程式暫停ns
hashlib(作業,檢驗文件的一致性,文件,視頻,圖片)
#md5
#sha
#import hashlib
#hashlib.md5('xxl'.encode())--如果使用sha演算法時,將此處md5改成sha
#md5.update('str'.encode())
#print(md5.hexdigest())
datetime
from datetime import datetime
dt=datetime.now()
print(datetime.timestamp(dt))
#now()
#utc()
#strftime('%Y-%m-%d')獲取到一個datetime對象
#timedelta(days=140),時間的加
#fromtimestamp(時間戳)時間戳轉datetime
#timestamp(datetime對象),datetime轉時間戳
pickle
shutil
#import
shutil.make_archive()壓縮文件,shutil.unpack_archive()解壓文件,shutil.retree()刪除目錄,shutil.move(),移動文件
#importlib
#import importlib
#importlib.import_module('模塊名')
#print(os.path.isdir('xxx')),判斷是否為目錄,isfile,是否為文件
copy
getpass,在命令行密文顯示
copy
logging
#兩種配置方式:basicconfig,logger
collections
#OderdDict,namedtuple,deque,defaultDict
functools
#reduce(add,iterable)
面向對象
三大特性:封裝,繼承,多態
#封裝:
①廣義的封裝:類中的成員
②狹義的封裝:私有成員,__名字,只有在類的內部使用,類的外部不能調用。
#繼承,所有的查找名字(調用方法和屬性)都是先找自己,自己沒有找父類
#如果自己和父類都有,希望自己和父類都調用,super()指定類名直接調用
①父類,基類,超類
②派生類,子類
③多繼承,查找順序,深度優先,廣度優先
④單繼承,子類可以使用父類的方法
#多態
-一個類表現出來的多種狀態,多個類表現出相似的狀態
-user類,用戶類
-vip_user
-svip_user
①鴨子類型
#vip_user,svip_user
#list,tuple
基礎概念:
#什麼是類:具有相同方法和屬性的一類事物
#什麼是對象,實例:一個擁有具體屬性值和動作的具體個體
#實例化:從一個類得到一個具體對象的過程
#實例
#實例化
組合:
#一個類的對象作為另一個類對象的實例變數
類成員:類變數,綁定方法,
特殊成員:類方法classmethod
靜態方法:staticmethod
屬性:property
特殊成員
雙下方法,魔術方法,內置方法
#__str__
__new__,構造方法
__init__,初始化方法
__dict__
__call__,對象加括弧就能使用
__enter__,__exit__,with上下文管理
__getitem__
__setitem__
__delitem__
__add__,兩個對象相加
__iter__
__dict__
相關內置函數:isinstance,對象和類
issubclass,類和類
type,類型,類=type(對象)
super遵循mro順序查找上一個類的
新式類和經典類:
py2繼承object就是新式類
#預設是經典類
py3都是新式類,預設繼承object
新式類:
#繼承object
支持super
多繼承,廣度優先
mro方法
經典類:
#py2中不繼承object
#沒有super語法
#多繼承深度優先
沒有mro方法