2015-03-02 80 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) 

我如何从FileNotFoundErrorfilename属性?因为如果我不水木清华这样的:

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

self.filenameNone

+0

既然你设法得到'filename' * *前你叫'super'初始化器(和** **为什么你是否混合使用'super'和'FileNotFound' ?!),你期望会发生什么? – jonrsharpe 2015-03-02 14:25:24

+0

我对'super()'关键字的使用非常困惑,我误解了它的工作原理。 – codkelden 2015-03-02 15:42:33

回答

1

你对super的调用是完全错误的,因为我认为你对继承存在误解。

子类也是其超类的成员。你不要问超类的属性;既然你已经继承了它,你将获得所有相同的属性。

在Python 需要显式调用父类的初始化方法:

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

这通常是负责设置共享属性的值。

但是,您的代码存在一个更基本的问题。当您引发异常时,您从不传递任何文件名属性,因此子类或超类都无法报告它。你可能需要做的是:

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

raise ConfigFileNotFoundError(my_filename)