python - python中的继承和覆盖__init__

标签 python overriding superclass

我正在阅读“深入 Python”,并在关于类的章节中给出了以下示例:

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

然后作者说,如果你想重写__init__方法,你必须用正确的参数显式调用父__init__

  1. 如果那个 FileInfo 类有多个祖先类怎么办?
    • 我是否必须显式调用所有祖先类的 __init__ 方法?
  2. 另外,我是否必须对要覆盖的任何其他方法执行此操作?

最佳答案

这本书在子类-父类(super class)调用方面有点过时了。在子类化内置类方面也有点过时了。

现在看起来是这样的:

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

注意以下几点:

  1. 我们可以直接继承内置类,如dictlisttuple

  2. super 函数处理跟踪此类的父类(super class)并适本地调用其中的函数。

关于python - python中的继承和覆盖__init__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/753640/

相关文章:

python - 当我在 scikit learn 中提供自定义词汇表时,为什么不能为 CountVectorizer 指定最小频率?

python - pd.to_datetime 将 DEC-11 或 JUNE-11 值替换为日期时间列

c# - 比较来自同一类的两个对象与大量字段

python - 使用 Django 时如何在命令行中退出 dbshel​​l (SQLite 3)?

c# - 重写结构体的 Equals 方法如何提高 C# 中的性能?

java - 强制重写类时调用基类版本方法,否则抛出异常

java多态后期绑定(bind)规则

c++ - 未处理的异常 - C++ 程序在转换时停止

python-2.7 - 使用 super() 的子类构造函数 - 获取未绑定(bind)方法 __init__()

python - 如何将 Pandas DataFrame 插入 Cassandra 中?