Последний экземпляр класса Python перезаписывает все остальные

0

Вопрос

У меня есть задание, в котором я должен создать класс для сотрудников, прочитать текстовый файл, содержащий информацию о сотрудниках, для хранения в качестве объекта, прочитать файл с отработанными часами и создать словарь информации об оплате из файлов. Итак, пока кажется, что все работает нормально, пока в текстовом файле сотрудника есть только один сотрудник, но как только я включаю второго, первый перезаписывается, и создается информация для второго. Это лишь часть информации, которой я располагаю до сих пор:

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)

Это то, что у меня есть до сих пор, и это возвращает правильный вывод, но когда я включаю вторую строку со вторым сотрудником, именно там у меня возникают проблемы. Кроме того, просто обратите внимание, что параметрами платежного листа должны быть дата и часы работы из текстового файла часов, а не только текстовый файл. Я совсем новичок в программировании, поэтому приношу извинения, если это простое исправление, я провел последние 3 дня, пытаясь разобраться в этом, посещая различные доски объявлений и веб-сайты. Любая помощь была бы очень признательна.

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

Лучший ответ

0

линия

return stf

вернитесь из функции настройки после прочтения первой строки, несмотря ни на что. Если вы хотите сохранить всю строку в списке объектов персонала, вам нужно создать этот список, а затем вернуть его. что-то в этом роде

        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

затем вы должны получить все строки в файле HFile. Тем не менее, то, как это строится, - это просто стэндж. вы создаете объект персонала, чтобы просмотреть список объектов персонала ?

возможно, вы захотите реструктурировать свой код в класс персонала и класс сотрудников? таким образом, у вас есть объект "Персонал", в котором есть участники с часами. Но здесь я могу ошибаться, так как не вижу полной картины

овации

Markus

2021-11-23 14:51:37

Спасибо за рекомендацию, я сделал, как вы упомянули, и создал пустой список stf, прежде чем читать файлы и добавлять их в список stf. Но я получил следующую ошибку: AttributeError: объект "список" не имеет атрибута "Платежный листок". Кроме того, для задания требовался только один созданный класс
HelpNeeded

теперь у вас есть список объектов персонала, поэтому вам нужно просмотреть список и позвонить в платежную ведомость по каждому из них.
Markus Rosjat

На других языках

Эта страница на других языках

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