2015-03-02 2 views
-1

У меня есть класс, который унаследованный от FileNotFoundError:Python как получить переменную класса родителя от унаследованного класса

class ConfigFileNotFoundError(FileNotFoundError): 
    def __init__(self): 
     self.filename = super().filename 
     FileNotFoundError.__init__(self) 
     self.message = "File is absent: {}".format(self.filename) 

Как получить атрибут filename от FileNotFoundError? Потому что, если я чего-л, как это:

if not os.path.isfile(path_to_file): 
    raise ConfigFileNotFoundError 

self.filename является None.

+0

Учитывая, что вы пытаетесь получить 'filename' * до * вы назвали' super' Инициализатора (и ** почему ** вы смешиваете 'super' и' FileNotFound' ?!), что вы ожидали бы? – jonrsharpe

+0

Я был очень смущен использованием ключевого слова 'super()', и я не понимаю, как это работает. – codkelden

ответ

1

Ваш вызов супер - это совершенно неправильно, потому что я думаю, что у вас есть неправильное представление о наследовании.

Подкласс is также является членом его суперкласса. Вы не запрашиваете суперкласс для атрибута; поскольку вы унаследовали его, вы получаете все те же атрибуты.

В Python вы сделать необходимость явного вызова метода суперкласса инициализации:

def __init__(self): 
    super().__init__(self) 

, который обычно отвечает за установку значения общих свойств.

Однако в вашем коде есть более фундаментальная проблема. Вы никогда не передаете атрибут имени файла при создании исключения, поэтому нет никакого способа, чтобы подкласс или суперкласс могли сообщить об этом. Вы, вероятно, нужно сделать следующее:

def __init__(self, filename): 
    super().__init__(self, filename) 

и

raise ConfigFileNotFoundError(my_filename) 
Смежные вопросы