python - 如果将对 super 的调用保存在变量中以供将来使用,会发生什么情况?

标签 python super

请原谅我对这里显而易见的内容一无所知,但是如果您将对 super 的调用保存在变量中并稍后使用它会发生什么。

这是类定义的一部分,向您展示我的意思。

class CaselessDict(dict):

    def __init__(self, *args, **kwargs):
        self.super = super(CaselessDict, self) # save super
        self.update(*args, **kwargs)

    def __getitem__(self, key):
        key = self.parsekey(key)
        return self.super.__getitem__(key) # use saved super

这是在我实现这个 CaselessDict 类时出现的,几乎每个方法中都有 super。

最佳答案

预期的事情发生了:self.super 将只持有一个 super 对象,它的行为就像 super(CaselessDict, self)

这种方法的问题是每个实例只有一个 super 属性,所以如果你有更多的类会使用这种技术,只有分配给 super 最后会正常运行。哎哟!所以,这样做通常不是一个好主意。您可以将属性命名为__super,这样它就会被破坏,但我建议像其他人一样调用super(CaselessDict, self)

当然,在 Python 3 中喜新厌旧,一个简单的 super() 调用就足够了。

关于python - 如果将对 super 的调用保存在变量中以供将来使用,会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7703230/

相关文章:

python - 从 Python 列表中删除日期

python - 用于非 Django 项目的类 Django 抽象数据库 API

python - 如何从孙子类调用 super 方法?

angular - 如何在 Angular 2 中将方法从一个组件调用到另一个组件?

java - super(Application.class); 是什么意思?在Java中?

python - 创建从 super() 类中提取变量的子类时出现问题

python - 级联分类器HAAR LBP建议

python - Celery Daemon 在 Centos 7 上不工作

python - 将元素形成 numpy 数组作为另外两个 numpy 数组时出现广播错误

java - Java中finish()和super.finish()的区别?