为什么以及如何使用Python的super(type1, type2)?

5 投票
1 回答
781 浏览
提问于 2025-04-17 02:34

super有两个参数,

super(type, obj_of_type-or-subclass_of_type)

我明白为什么要用super,并且第二个参数是obj_of_type的用法。但是我不太明白第二个参数是子类时的情况。

有没有人能解释一下为什么和怎么用?

1 个回答

3

如果你想调用一个实例方法,就需要传递一个对象。如果你想调用一个类方法,就需要传递一个类。

使用 super() 来调用类方法的经典例子是工厂方法,这种情况下你希望调用所有父类的工厂方法。

class Base(object):
    @classmethod
    def make(cls, *args, **kwargs):
        print("Base.make(%s, %s) start" % (args, kwargs))
        print("Base.make end")

class Foo(Base):
    @classmethod
    def make(cls, *args, **kwargs):
        print("Foo.make(%s, %s) start" % (args, kwargs))
        super(Foo, cls).make(*args, **kwargs)
        print("Foo.make end")

class Bar(Base):
    @classmethod
    def make(cls, *args, **kwargs):
        print("Bar.make(%s, %s) start" % (args, kwargs))
        super(Bar, cls).make(*args, **kwargs)
        print("Bar.make end")

class FooBar(Foo,Bar):
    @classmethod
    def make(cls, *args, **kwargs):
        print("FooBar.make(%s, %s) start" % (args, kwargs))
        super(FooBar, cls).make(*args, **kwargs)
        print("FooBar.make end")

fb = FooBar.make(1, 2, c=3)

"在Python中调用父类的类方法" 提供了一个实际的例子。

撰写回答