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

时间:2011-04-12 11:09:22

标签: 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)

1 个答案:

答案 0 :(得分:29)

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

class UpperBase(Base):
    def __init__(self, name):
        if not name_valid(name):
            raise ValueError()
        super(UpperBase, self).__init__(name)

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