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

发布于 2024-12-05 09:24:58 字数 183 浏览 0 评论 0原文

super 有 2 个参数,

super(type, obj_of_type-or-subclass_of_type)

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

任何人都可以展示为什么以及如何?

super has 2 args,

super(type, obj_of_type-or-subclass_of_type)

I understand how and why to use super with the 2nd arg being obj_of_type.
But I don't understand the matter for the 2nd arg being subclass.

Anyone can show why and how?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

独闯女儿国 2024-12-12 09:24:58

如果您想调用实例方法,则可以传递一个对象。如果您想调用类方法,则传递一个类。

对类方法使用 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 中调用超类的类方法”有一个现实世界例子。

You pass an object if you want to invoke an instance method. You pass a class if you want to invoke a class method.

The classic example for using super() for class methods is with factory methods, where you want all the superclass factory methods to be called.

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" has a real-world example.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文