Python中的继承和覆盖__init __

问题描述 投票:124回答:5

我读过“ Dive Into Python”,在有关类的章节中给出了此示例:

class FileInfo(UserDict):
    "store file metadata"
    def __init__(self, filename=None):
        UserDict.__init__(self)
        self["name"] = filename

作者然后说,如果要覆盖__init__方法,则必须使用正确的参数显式调用父级__init__

  1. 如果FileInfo类具有一个以上的祖先类,该怎么办?
    • 我必须显式调用所有祖先类的__init__方法吗?
  2. 而且,我是否必须对要覆盖的任何其他方法执行此操作?
python overriding superclass
5个回答
149
投票

这本书在子类-超类调用方面有些过时。关于对内置类进行子类化也有些过时。


16
投票

在需要继承的每个类中,您可以运行每个需要在子类启动时进行初始化的类的循环...可以更好地理解可以复制的示例...


14
投票

您实际上并没有[[have


4
投票
如果FileInfo类具有多个祖先类,那么您绝对应该调用其所有__init __()函数。您还应该对__del __()函数(该函数是析构函数)执行相同的操作。

2
投票
是,您必须为每个父类调用__init__。如果要覆盖两个父级中都存在的函数,则函数也是如此。
© www.soinside.com 2019 - 2024. All rights reserved.