《隨便寫》一些小知識
阿新 • • 發佈:2020-07-21
<1>獲取當前讀寫的位置
在讀寫檔案的過程中,如果想知道當前的位置,可以使用tell()來獲取
# 開啟一個已經存在的檔案 f = open("test.txt", "r") str = f.read(3) print "讀取的資料是 : ", str # 查詢當前位置 position = f.tell() print "當前檔案位置 : ", position str = f.read(3) print "讀取的資料是 : ", str # 查詢當前位置 position = f.tell() print "當前檔案位置 : ", position f.close()
<2>定位到某個位置
如果在讀寫檔案的過程中,需要從另外一個位置進行操作的話,可以使用seek()
seek(offset, from)有2個引數
- offset:偏移量
- from:方向
- 0:表示檔案開頭
- 1:表示當前位置
- 2:表示檔案末尾
demo:把位置設定為:從檔案開頭,偏移5個位元組
# 開啟一個已經存在的檔案 f = open("test.txt", "r") str = f.read(30) print "讀取的資料是 : ", str # 查詢當前位置 position = f.tell() print "當前檔案位置 : ", position # 重新設定位置 f.seek(5,0) # 查詢當前位置 position = f.tell() print "當前檔案位置 : ", position f.close()
demo:把位置設定為:離檔案末尾,3位元組處
# 開啟一個已經存在的檔案 f = open("test.txt", "r") # 查詢當前位置 position = f.tell() print "當前檔案位置 : ", position # 重新設定位置 f.seek(-3,2) # 讀取到的資料為:檔案最後3個位元組資料 str = f.read() print "讀取的資料是 : ", str f.close()
1. 理解self
- 所謂的self,可以理解為自己
- 可以把self當做C++中類裡面的this指標一樣理解,就是物件自身的意思
- 某個物件呼叫其方法時,python直譯器會把這個物件作為第一個引數傳遞給self,所以開發者只需要傳遞後面的引數即可
2.工廠方法模式
當買車時,有很多種品牌可以選擇,比如北京現代、別克、凱迪拉克、特斯拉等,那麼此時該怎樣進行設計呢?
# 定義一個基本的4S店類 class CarStore(object): #僅僅是定義了有這個方法,並沒有實現,具體功能,這個需要在子類中實現 def createCar(self, typeName): pass def order(self, typeName): # 讓工廠根據型別,生產一輛汽車 self.car = self.createCar(typeName) self.car.move() self.car.stop() # 定義一個北京現代4S店類 class XiandaiCarStore(CarStore): def createCar(self, typeName): self.carFactory = CarFactory() return self.carFactory.createCar(typeName) # 定義伊蘭特車類 class YilanteCar(object): # 定義車的方法 def move(self): print("---車在移動---") def stop(self): print("---停車---") # 定義索納塔車類 class SuonataCar(object): # 定義車的方法 def move(self): print("---車在移動---") def stop(self): print("---停車---") # 定義一個生產汽車的工廠,讓其根據具體得訂單生產車 class CarFactory(object): def createCar(self,typeName): self.typeName = typeName if self.typeName == "伊蘭特": self.car = YilanteCar() elif self.typeName == "索納塔": self.car = SuonataCar() return self.car suonata = XiandaiCarStore() suonata.order("索納塔")
定義了一個建立物件的介面
(可以理解為函式),但由子類決定要例項化的類是哪一個,工廠方法模式讓類的例項化推遲到子類,抽象的CarStore提供了一個建立物件的方法createCar,也叫作工廠方法
。
子類真正實現這個createCar方法創建出具體產品。 建立者類不需要直到實際建立的產品是哪一個,選擇了使用了哪個子類,自然也就決定了實際建立的產品是什麼。
單例模式
確保某一個類只有一個例項,而且自行例項化並向整個系統提供這個例項,這個類稱為單例類,單例模式是一種物件建立型模式。
# 例項化一個單例 class Singleton(object): __instance = None def __new__(cls, age, name): #如果類數字能夠__instance沒有或者沒有賦值 #那麼就建立一個物件,並且賦值為這個物件的引用,保證下次呼叫這個方法時 #能夠知道之前已經建立過物件了,這樣就保證了只有1個物件 if not cls.__instance: cls.__instance = object.__new__(cls) return cls.__instance a = Singleton(18, "dongGe") b = Singleton(8, "dongGe") print(id(a)) print(id(b)) a.age = 19 #給a指向的物件新增一個屬性 print(b.age)#獲取b指向的物件的age屬性