我有,我有被列爲「ID名稱******中國地址」人的文件,如:寫入文件條款
1 Mike 0752 Dallas Alley
2 John 0744 Square Avenue
3 Johnny 0923 Corner Street
每當我試圖刪除或修改一個人它不會讓我這樣做,除非我在程序執行期間添加該人員。我的意思是,我運行我的程序,除非添加該人(通過我使用的添加方法),否則我將無法修改我的文件。
我可以添加人員到文件,就像我說的,但即使如此,它不檢查ID是否已經存在,即使我已經在我的方法中設置了該設置。
我應該提到,我有一個基於類的程序,具有存儲庫 - 控制器 - 用戶界面結構。保存功能,我在我的倉庫是:
def save(self, pers):
'''
Saves a person in class Persoana, returns ValueError if the ID already exists
'''
for i in self.__persList:
if(i.idPers == pers.idPers):
raise ValueError("ID already exists: " +str(i.idPers))
self.__persList.append(pers)
我用我的控制器此功能,如下所示:
def createPerson(self, idPers, nume, telefon, adresa):
'''
Creates a person as long as the data introduced is correct
'''
i = Persoana(idPers, nume, telefon, adresa)
self.__valiPers.validare(i) //checks if the data I put in is alright(name doesn't contain numbers etc.)
self.__repo.save(i)
我使用繼承做出FileRepository文件文件,它繼承方法/參數從最初的Repository文件。
class AgendaFileRepository(AgendaRepository):
def __init__(self, file_name):
self.__file_name = file_name
AgendaRepository.__init__(self)
self.__load_from_file()
def __write_to_file(self):
l=self.get_persoane()
f=open(self.__file_name,"w")
for person in l:
f.write(repr(person)+'\n')
f.close()
def __load_from_file(self):
try:
f=open(self.__file_name,"r")
linie=f.readline().rstrip('\n')
while linie!="":
attr=linie.split(" ")
a=Persoana(attr[0], attr[1], attr[2],attr[3])
AgendaRepository.save(self, a)
linie=f.readline().rstrip('\n')
f.close()
except IOError:
raise IOError("File cannot be open")
except ValueError:
raise ValueError("Can't read from file")
except IndexError:
raise IndexError("Can't read from file")
def save(self, pers):
AgendaRepository.save(self, pers)
self.__write_to_file()
,我在我的UI文件夾的功能是:
def addPerson(self):
'''
Adds a person to the file, returns value error if the data isn't valid
'''
name=input("Name: ")
telnumber = input("Tel number: ")
adress = input("Adress: ")
idPers=int(input("Id:"))
try:
self.__ctrl.createPerson(idPers, name, telnumber, adress)
print("Added person successfully")
except ValueError as ex:
print(str(ex))
不管怎樣,我認識到,這項工作可以做到的方式更容易/更快,但教授希望讓我們瞭解OOP我猜測。無論如何,我可以將文件寫入文件,但它不會檢查該用戶的ID是否已經存在,除非在程序執行過程中添加了該用戶。我不能刪除/修改人員,除非他們在程序執行期間被添加。
現在用這個檢查我的大腦2個小時,檢查每一行和每一行,但我似乎無法破解它。我究竟做錯了什麼?
讓程序在添加人員時寫入測試輸出(打印)。然後你可以看到程序啓動時是否正確添加人員。 – Randrian
旁註:您正在使用/執行'repr()'/'__repr __()'錯誤。這是程序員/調試的字符串表示,而慣例可以是一個字符串,它可以是'eval()',以便在尖括號中獲得相同的值或某些字符,這對搜索錯誤時程序員或多或少有幫助。你可以使用'str()'/'__str __()'或添加專用的(de)序列化方法。此外,「私有」屬性的雙下劃線是錯誤的:Python沒有私有名稱,該名稱是爲了不同的目的。只需使用一個下劃線來標記實施細節。 – BlackJack