Python如何从继承的类中获取父类变量

时间:2015-03-02 14:18:32

标签: python inheritance python-3.x

我的课程继承自FileNotFoundError

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.filenameNone

1 个答案:

答案 0 :(得分:1)

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

子类 也是其超类的成员。您不要向超类询问属性;既然你继承了它,你就会获得所有相同的属性。

在Python中你需要显式调用超类初始化方法:

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

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

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

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

raise ConfigFileNotFoundError(my_filename)