Python中的接口编程?

-1 投票
2 回答
594 浏览
提问于 2025-04-17 05:09

Python的父类中,我怎么能调用在子类中被重写的函数呢?

class A:
    @staticmethod
    def interfaceBasedMethod():
        print "Want to delegate to overriding method in subclass"

    @staticmethod
    def a():
        interfaceBasedMethod() # <-- I know this causes error. But here 
                               # I want to call the overridden method in subclass.

class B(A):
    @staticmethod
    def interfaceBasedMethod():
        print "Class B processes."

if __name__ == "__main__":
    b=B
    b.a()

理想的输出:

Class B processes.

谷歌搜索并没有返回关于Python中基于接口编程的页面,虽然在Java等语言中这应该是很常见的。谢谢!

2 个回答

1

你的继承问题之前已经在这里回答过了。

简单来说,Python提供了一个叫做super(type[, instance])的函数。

这里有详细的文档,super函数让你在子类中访问父类的方法变得很简单。这个页面详细探讨了super()的使用场景,但这里给你个大概念。

class C(B):
    def method(self, arg):
        super(C, self).method(arg)

这个可以稍微概括一下……

class C(B):
    def method(self, arg):
        super(self.__class__, self).method(arg)
2

不谈风格问题,建议使用classmethod而不是staticmethod。因为classmethod会把正在使用的类传递进来。

class A:
    @classmethod
    def interfaceBasedMethod(cls):
        print "Want to delegate to overriding method in subclass"

    @classmethod
    def a(cls):
        cls.interfaceBasedMethod()

class B(A):
    @classmethod
    def interfaceBasedMethod(cls):
        print "Class B processes."

if __name__ == "__main__":
    b=B
    b.a()

撰写回答