super有2个args,
super(type, obj_of_type-or-subclass_of_type)
我理解如何以及为什么使用super作为obj_of_type的第二个arg。 但我不明白第二个arg是子类的问题。
任何人都可以说明原因和方式?
答案 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”有一个现实世界的例子。