为什么以及如何使用Python的super(type1, type2)?
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中调用父类的类方法" 提供了一个实际的例子。