Класс super () не может унаследовать "NameError: имя 'in_dir' не определено - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь передать путь к входному каталогу из отдельного скрипта в основной модуль "qc".

Моя первая попытка передачи аргумента от родителя к потомку в модуле qc выглядит следующим образом:

import os

class Data:

    def __init__(self, in_dir):

        # get all inputs
        self.in_dir = in_dir # get input directory

        # get files from input directory
        self.files = os.listdir(self.in_dir) # get file list


class LAS(Data):
    """Takes in log files from parent class Data's file list"""

    def __init__(self):

        # inherit the directory from Data parent
        super().__init__(LAS, in_dir)

        # target only the .las files in the directory
        ext_las = ['.las', '.LAS', '.Las', '.LAs']
        self.lasfiles = [lasfile for lasfile in self.files if any(match in lasfile for match in ext_las)]

    def out_las(self):
        return self.lasfiles

Когда я вызываю классы из моего отдельного скрипта, это выглядит так:

in_dir = 'C:\\......directory path...'

Data(in_dir=in_dir)

output = LAS().out_las()

Что вызывает ошибку:

  File "C:\......", line 62, in __init__
    super().__init__(LAS, in_dir)

NameError: name 'in_dir' is not defined

Я не могувыяснить, как правильно вызывать входы этого родительского класса.

Что я делаю неправильно?

1 Ответ

1 голос
/ 30 апреля 2019

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

Следующее может простоработать близко к тому, что вы ожидаете, надеюсь, это поможет.

class LAS(Data):
    """Takes in log files from parent class Data's file list"""

    def __init__(self, in_dir):

        # inherit the directory from Data parent
        super().__init__(in_dir)

        # target only the .las files in the directory
        ext_las = ['.las', '.LAS', '.Las', '.LAs']
        self.lasfiles = [lasfile for lasfile in self.files if any(match in lasfile for match in ext_las)]

    def out_las(self):
        return self.lasfiles


las = LAS(in_dir='C:\\......directory path...')
output = las.out_las()
...