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

时间:2011-09-19 04:29:35

标签: python super

super有2个args,

super(type, obj_of_type-or-subclass_of_type)

我理解如何以及为什么使用super作为obj_of_type的第二个arg。 但我不明白第二个arg是子类的问题。

任何人都可以说明原因和方式?

1 个答案:

答案 0 :(得分:2)

如果要调用实例方法,则传递对象。如果要调用类方法,则传递一个类。

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)

Invoking a superclass's class methods in Python”有一个现实世界的例子。