Передайте 'имя файла' в качестве аргумента классу в "python 3" - PullRequest
0 голосов
/ 24 февраля 2020

Чтобы прочитать заголовок (общий заголовок для многих файлов) файла (ов) журнала. класс был создан и вызывает его объект из другого файла. Класс header возвращает словарь значений заголовков.

Как передать весь файл в качестве аргумента классу заголовка из дочернего класса?

Дочерний класс:

class fileLog(object):
   def __init__(self):
    try:
        # File path 
        filePath = "C:\FileLog1.log"
        file = open(filePath, "rb")

        with file:
            self.fetchHeader(file)

    finally:
        file.close()

# This method fetches the header information            
def getHeader(self, file):

    '''
        Get header information from header class

    '''
    header = HeaderInfo(file)

    header_dict = header.Fetch_Data()
    ....
    ....

Класс информации заголовка:

class HeaderInfo(dict):
def __init__(self, fileName):
    header_dict = defaultdict(list)


    print(type(fileName))
    # self._object = self.file
    self._fileName = fileName
    file = open(self._fileName, "rb")

    self._dict = {}     
    ....
    ....

def Get_Data(self):
    return self._dict


hi = HeaderInfo('**** what to pass here ? ****')

if __name__ == '__main__':
    hi.Fetch_Data('** what to pass here ? **')

Я не хочу жестко кодировать имя файла в классе информации заголовка, поскольку несколько файлов могут использовать один и тот же класс, и файл должен передаваться динамически.

Ошибка:

TypeError: init () отсутствует 1 обязательный позиционный аргумент: 'fileName'

Я знаю, что не передаю fileName, но как обработать имя файла в HeaderInfo класс

1 Ответ

0 голосов
/ 24 февраля 2020
hi = HeaderInfo('pass file name here')

На самом деле ошибки показывают, что метод init имеет имя файла в качестве аргументов, если вы вызовете как hi = HeaderInfo (), он выдаст ошибку вроде TypeError: init (), пропустив 1 обязательный позиционный аргумент: 'fileName', поэтому передайте имя файла при создании объекта для класса

...