python_路徑操作及類和對象


一。路徑操作

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 代表類本身,是不支持再調用類中的其他的實例方法




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM