为什么以及如何使用Python';超级(1型,2型)?

为什么以及如何使用Python';超级(1型,2型)?,python,super,Python,Super,super有2个参数 super(type, obj_of_type-or-subclass_of_type) 我理解如何以及为什么使用super,第二个参数是类型为的obj_。 但是我不明白第二个arg是子类 任何人都可以显示原因和方式?如果要调用实例方法,请传递对象。如果要调用类方法,可以传递一个类 使用类方法的super()的经典示例是工厂方法,您希望调用所有超类工厂方法 class Base(object): @classmethod def make(cls, *ar

super有2个参数

super(type, obj_of_type-or-subclass_of_type)
我理解如何以及为什么使用super,第二个参数是类型为的obj_。 但是我不明白第二个arg是子类


任何人都可以显示原因和方式?

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

使用类方法的
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)

“”有一个真实的例子。

好吧,就这些?但是为什么它应该是“子类”而不是“超类”?@Alcott:出于同样的原因,当使用
super
调用实例方法时,第二个参数是派生最多的类的实例:第二个参数提供了调用方法的实际对象(实例或类)(包括元组),前者提供了开始的位置。明白了,但是我不能通过“super(FooBar,self).make”调用超类的classmethod吗?@Alcott但是类内方法或
\uuuuu new\uuuuu
,这是一个静态方法,你没有实例,你只有类,如果只使用super(),结果是完全相同的。\uuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?