一。路徑操作
1。調用方式
第一種
import os.path
# 第二種方式
from os import path
# os.path 主要處理系統路徑相關的操作。
2.獲取文件的絕對路徑
理由:因為絕對路徑不會變
os.path.abspath(__file__)
例子:
print(os.path.abspath(__file__))
運行結果:
解析:
# __file__ :獲取文件相對路徑
# __name__ :獲取函數名字
例子:
1)在控制台他的父目錄下執行py文件顯示結果如下__init__.py
2)如果在__init__.py 直接run,會展__init__.py路徑,而在控制台執行的py文件不會展示,調用代碼都是一樣的。
例子:
3.獲取上一級路徑
os.path.dirname(file_path)
運行結果:
4.路徑拼接:
os.path.join(path,*paths)
路徑拼接 文件 / 文件
所有獲取到的路徑,只是一個路徑的表示,並不代表這個文件或者路徑真的存在。
說白了:路徑得到的是一個字符串。這個字符串是一個路徑格式 `\` ,
運行結果:
5.獲取當前文件路徑
os.getcwd()
運行結果:
6.判斷路徑是否存在
os.path.exists(path)
運行結果:
7.創建一個新的目錄(文件夾)
os.mkdir()
運行前,只有三個文件:
file_name=os.path.abspath(__file__)
dir_name=os.path.dirname(file_name)
dict_2=os.path.join(dir_name, 'dict_2.txt' )
if not os.path.exists(dict_2):
os.mkdir(dict_2)
運行后,創建了一個文件夾:
如果需要創建文件,需要用到 文件寫入功能與路徑拼接結合:
dict_3=os.path.join(dir_name, 'dict_3.txt' )
with open(dict_3,'w') as f:
f.write('')
運行結果:
8.判斷是否是文件或是目錄
#判斷是否是文件
print(os.path.isfile(dict_2))
#判斷是否是路徑
print(os.path.isdir(dict_2))
運行結果:
二.類與對象
1.定義
1)類
定義:是一個類別,比如:人類,獸類每個類都有共同點
class 類名:
類的組成部分
2)對象:
定義:對象又被稱為實例,是一個類中得個體。比如人類中有男人和女人
3)命名方式
類的命名:大駝峰命名: 兩個單詞的首字母大寫。
函數的命名:下划線命名:perfect_man_help
變量命名:下划線命名.
class Zip:
pass
運行結果:
4)實例化調用,類的對比
#實例化
a=Zip()
#類的對比,兩個實例化 不代表同一個類。
a=Zip()
b=Zip()
print(a)
print(b)
運行結果:
2.屬性
1)定義:表示的是類/對象的特征。
類屬性(類變量): 這個類的特征,這個群體的特征, 別的類(別的群體)可能不具備
實例屬性(實例變量) : 給個個體的特征,類當中的其他成員可能不具備。
2)類屬性的獲取:
類名.屬性
類屬性:可以先天定義也可以 后天學習(手工添加)
3)類屬性調用及添加
class Photo:
# 定義類屬性
format = 'peng'
size = "12M"
look = 'very beautiful'
#先天類屬性調用
print(Photo.format)
print(Photo.look)
#類屬性后天學習(添加)
Photo.idea='hello word'
print(Photo.idea)
運行結果:
4)實例屬性的調用與添加:
#實力屬性的后天獲取與學習(添加)
luck=Photo()
print(luck.look)
#實例后天學習(修改)
luck.look='beautiful'
print(luck.look)
#實例后天添加
luck.idea='hello world !'
print(luck.idea)
運行結果:
5)類屬性與實例屬性的區別
區別一:
類屬性:所有的成員都是一樣的。
實例屬性:不是每個成員都一樣
區別二:
類屬性,可以被實例、對象訪問
實例屬性, 不可以被類獲取
#類屬性與實例屬性區別
class Photo:
# 定義類屬性
format = 'peng'
size = "12M"
look = 'very beautiful'
#區別一:所有的成員都是一樣的,類屬性,可以被實例、對象訪問
a=Photo()
b=Photo()
print(a.look)
print(b.look)
運行結果:
#區別二:不是每個成員都一樣,實例屬性, 不可以被類獲取或者其他實例化類調用
a.idea='hello world !'
print(Photo.idea)
運行結果:
print(b.idea)
運行結果:
3.類方法
定義:
方法:表示類 、 對象的行為。
方法本質上是函數。
1)方法與函數的區別:
1.類方法需要加self,函數方法不用;
2.類方法是放在類里面的,需要加縮進,函數方法是頂格寫的;
3.調用過程不一樣,類方法調用過程是:類.類方法,函數要么不加前綴,要么加模塊名;
2)對象.方法、實例.方法
class Photo:
# 定義類屬性
format = 'peng'
size = "12M"
look = 'very beautiful'
#類方法
def wall_painting(self):
pass
#對象.方法
Photo().wall_painting()
#實例.方法
a=Photo()
a.wall_painting()
3).類方法:
# 類方法:@classmethod
代表類本身
使用方法:
1. 在方法的上面添加 @classmethod;
2. 把實例方法當中的 self 改成 cls.
class Photo:
# 定義類屬性
format = 'peng'
size = "12M"
look = 'very beautiful'
#類方法
@classmethod
def wall_painting(cls):
print("牆畫是{}".format(cls.look))
#類方法@classmethod調用
Photo().wall_painting()
a=Photo()
a.wall_painting()
Photo.wall_painting()
運行結果:
靜態方法:@staticmethod
靜態方法表示: 方法的上面加上一個 @staticmethod
不需要用 self, cls 作為固定參數
用途:方便管理。
與類方法@classmethod對比:
1.是剛剛好放在一個類當中的普通函數而已,除了放在類當中,和普通函數沒什么區別;
2.沒有實際作用,和類或者對象沒有關系(聯系);
3.不需要用 self, cls 作為固定參數。
self與cls區別:
self: 在 **類里面** ,表示一個 **對象** 他自己。自我, this
cls, : 在 **類里面** ,表示一個 **類** 他自己。自我, this
調用靜態方法與函數的區別:
靜態方法,(普通函數) 只需要在調用靜態方法,前面加上類名或者對象名
類外面的普通函數:普通函數不需要加類,模塊
class Photo:
# 定義類屬性
format = 'peng'
size = "12M"
look = 'very beautiful'
@staticmethod
def bedside_painting():
print("床頭畫是{}".format("非常好看的"))
#靜態方法調用
Photo.bedside_painting()
Photo().bedside_painting()
a=Photo()
a.bedside_painting()
運行結果:
普通方法調用:
#普通方法調用
Photo().putong_photo()
a=Photo()
a.putong_photo()
運行結果:
#錯誤調用
# Photo.putong_photo()
Photo() :是類初始化的過程,類初始化會調用一邊類的所有方法
運行結果:
4.初始化
定義:要通過定義的類得到一個具體的對象。
表現:
__init__ ,可以自己定義初始化參數
特征:
__init__ 定義的形式參數 和 對象的實例化 的實際參數,是一一對應的。
1. 必須 return None(初始化__init__返回的結果是None);
2. 傳入的參數必須要設置成實例屬性,才能被被對象訪問到。
1)調用有初始化的類
class Photo:
# 定義類屬性
format = 'peng'
size = "12M"
look = 'very beautiful'
#初始化
def __init__(self,what,who):
self.what=what
self.who=who
#類方法
@classmethod
def wall_painting(cls):
print("牆畫是{}".format(cls.look))
@staticmethod
def bedside_painting():
print("床頭畫是{}".format("非常好看的"))
def putong_photo(self,grade):
self.wall_painting()
#定義grade值
print("普通畫是{}".format(grade))
#定義實例屬性
self.dingyide=False
#調用有初始化的類,實際參數需要和__init__中的形式參數一一對應
a = Photo('淘寶','Me')
print(a.what)
print(a.who)
運行結果:
#方法內部可以相互調用
a.putong_photo()
#方法內部是可以定義參數的。
a.putong_photo('超級好看')
運行結果:
#初始化后,后台定義dingyide屬性
a.dingyide=True
print(a.dingyide)
運行結果:
#初始化后,修改__init__屬性
a.what="京東"
print(a.what)
運行結果:
5.存續,理解還不是很透徹。
1)類可以調用類屬性,不可以調用實例屬性__ini__屬於實例屬性;
實例屬性可以調用類屬性;
2)實例方法可以調用類方法;
類不可以調用實例方法,cls 代表類本身,是不支持再調用類中的其他的實例方法