Ostatni egzemplarz klasy Python zastępuje wszystkie inne

0

Pytanie

Mam zadanie, w którym muszę utworzyć klasę dla pracowników, przeczytać plik tekstowy zawierający informacje o pracownikach, do przechowywania jako obiektu, odczytać plik z sprawdzonymi godzin i utworzyć słownik informacji o płatności z plików. Tak więc, podczas gdy wydaje się, że wszystko działa normalnie, aż w pliku tekstowym pracownika jest tylko jeden pracownik, ale jak tylko włączam drugiego, pierwszy jest zastępowany, i tworzy informacje dla drugiego. To tylko część informacji, które ja posiadam do tej pory:

class Staff:
    staffData = {}

    def __init__(self, EmpID, LName, FName, RHours, HRate, OTMult, TaxC, SBand, Date, HrsWorked):
        self.EmpID = EmpID
        self.LName = LName
        self.FName = FName
        self.RHours = RHours
        self.HRate = HRate
        self.OTMult = OTMult
        self.TaxC = TaxC
        self.SBand = SBand
        self.Date = Date
        self.HrsWorked = HrsWorked
        Staff.staffData[EmpID] = self

    def setup(staff ,hrs):  # staff and hrs are text files
        with open(staff) as empFile:
            for line in empFile:
                SID, LN, FN, RH, HR, OTM, TC, SB = line.split()
            with open(hrs) as hFile:
                for line in hFile:
                    SID, date, HrsWorked = line.split()
                    stf = Staff(SID, LN, FN, int(RH), int(HR), float(OTM), int(TC), int(SB),date, HrsWorked)
                    return stf

    def paySlip(self,HrsWorked, date):
        paymentDict = {}

        #creates paySlip using information from instance and creates others by performing 
         calculations
        return paymentDict

jg = Staff.setup('Staff.txt', 'Hrs.txt')
dic = jg.paySlip(42,'31/10/2021')
print(dic)

To jest to, co mam do tej pory, i to zwraca poprawny wynik, ale gdy włączam drugi wiersz z drugim pracownikiem, to właśnie tam mam problemy. Ponadto, po prostu należy pamiętać, że ustawienia płatności arkusza musi być data i godziny pracy z pliku tekstowego godzin, a nie tylko plik tekstowy. Jestem zupełnie początkujący w programowaniu, więc przepraszam, jeśli jest to prosta poprawka, ja przez ostatnie 3 dni, próbując zorientować się w tym, odwiedzając różne fora i strony internetowe. Każda pomoc była bym bardzo wdzięczna.

class dictionary file object
2021-11-23 14:15:15
1

Najlepsza odpowiedź

0

linia

return stf

wróć z funkcji ustawienia po przeczytaniu pierwszego wiersza, bez względu na to, że. Jeśli chcesz zapisać cały wiersz w liście obiektów personelu, trzeba stworzyć tę listę, a następnie go zwrócić. coś w tym rodzaju

        with open(hrs) as hFile:
            stf = []
            for line in hFile:
                SID, date, HrsWorked = line.split()
                stf.append(Staff(SID, LN, FN, int(RH), int(HR), float(OTM), int(TC), int(SB),date, HrsWorked))
            return stf

następnie trzeba uzyskać wszystkie linie w pliku HFile. Jednak to, jak jest zbudowany, to po prostu стэндж. tworzysz obiekt pracowników, aby wyświetlić listę obiektów personelu ?

może chcesz restrukturyzacji swój kod do klasy pracowników i klasa pracowników? w ten sposób masz obiekt "Personel", w którym uczestnicy z zegarem. Ale tutaj mogę się mylić, tak jak nie widzę pełnego obrazu

owacje na stojąco

Markus

2021-11-23 14:51:37

Dzięki za rekomendację, zrobiłem jak pan wspomniał, i stworzył pusta lista stf, zanim czytać pliki i dodać je do listy stf. Ale mam następujący błąd: AttributeError: obiekt "lista" nie ma atrybutu "Płatności kartkę". Ponadto, dla zadania potrzebny był tylko jeden utworzony klasa
HelpNeeded

teraz masz listę obiektów personelu, więc trzeba przewinąć listę i zadzwonić do płatności płac dla każdego z nich.
Markus Rosjat

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................