在Python中,super()总是优先在方法中调用。有没有情况应该稍后调用?

43 投票
1 回答
11856 浏览
提问于 2025-04-16 15:34

有没有一些情况是你想在调用super()之前先做一些处理的呢?

这个例子有点牵强。有没有更好的例子呢?这样做算不算是符合Python的风格呢?

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 个回答

54

有时候,在调用 super() 之前,你需要先检查一下参数是否正确:

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

我觉得这样做没有什么不对,因为这是最简单直接的方法。还有,看看 @JHSaunders 的评论,他提到的观点也很不错。

撰写回答