一、內容回顧
面向物件
類變數
方法
:靜態方法
:類方法
:系結方法
:屬性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方法
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/183067.html
標籤:Python
下一篇:python學習第一天
