为什么以及如何使用Python';超级(1型,2型)?
super有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(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?