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

qtw*_*trt 5 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
Run Code Online (Sandbox Code Playgroud)

当我实现这个CaselessDict类时几乎每个方法都有超级的东西.

Pet*_*rin 4

预期的事情发生了:self.super只会持有一个super行为类似于 的对象super(CaselessDict, self)

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

当然,Python 3 中的草更绿,简单的super()调用就足够了。