在python中,super()总是在方法中首先被调用.有没有应该稍后调用的情况?

Tom*_*ime 29 python super

在调用super()之前是否存在要进行某些处理的情况?

这是一个人为的例子.有更好的例子吗?这被认为是pythonic吗?

class Base(object):
    def __init__(self, name):
        print "Base %s created" % name
        self._name = name

class UpperBase(A):
    """ Similar to base but the name is in uppercase. """
    def __init__(self, name):
        name = name.upper() 
        super(UpperBase, self).__init__(name)
Run Code Online (Sandbox Code Playgroud)

Gab*_*aru 36

有时您需要在调用之前验证参数super():

class UpperBase(Base):
    def __init__(self, name):
        if not name_valid(name):
            raise ValueError()
        super(UpperBase, self).__init__(name)
Run Code Online (Sandbox Code Playgroud)

我不明白为什么这不会是pythonic,因为这是最简单的方法,而且很简单.另外,阅读@JHSaunders的评论,他提出了一个很好的观点.

  • Ya,python中的init方法不是像C++这样的构造函数,它不进行实际的内存分配.到init被调用时,内存被分配.所以它实际上只是一个恰好具有某种语义的常规方法(它是在构造一个对象后调用的).所以简而言之,你应该能够在任何地方调用它.(如果我错了,请纠正我) (19认同)
  • 在 Python 3 中,您可以简单地调用 `super()` 而不是 `super(UpperBase, self)`:https://docs.python.org/3/library/functions.html#super (4认同)