开发者社区> 问答> 正文

调用父类方法

你想在子类中调用父类的某个已经被覆盖的方法。

展开
收起
哦哦喔 2020-04-17 15:02:32 1030 0
2 条回答
写回答
取消 提交回答
  • 子类调用父类方法,可以用super关键字。比如:super.xxx();

    2020-04-18 21:51:01
    赞同 展开评论 打赏
  • 为了调用父类(超类)的一个方法,可以使用 super() 函数,比如:
    
    class A:
        def spam(self):
            print('A.spam')
    
    class B(A):
        def spam(self):
            print('B.spam')
            super().spam()  # Call parent spam()
    super() 函数的一个常见用法是在 __init__() 方法中确保父类被正确的初始化了:
    
    class A:
        def __init__(self):
            self.x = 0
    
    class B(A):
        def __init__(self):
            super().__init__()
            self.y = 1
    super() 的另外一个常见用法出现在覆盖Python特殊方法的代码中,比如:
    
    class Proxy:
        def __init__(self, obj):
            self._obj = obj
    
        # Delegate attribute lookup to internal obj
        def __getattr__(self, name):
            return getattr(self._obj, name)
    
        # Delegate attribute assignment
        def __setattr__(self, name, value):
            if name.startswith('_'):
                super().__setattr__(name, value) # Call original __setattr__
            else:
                setattr(self._obj, name, value)
    在上面代码中,__setattr__() 的实现包含一个名字检查。 如果某个属性名以下划线(_)开头,就通过 super() 调用原始的 __setattr__() , 否则的话就委派给内部的代理对象 self._obj 去处理。 这看上去有点意思,因为就算没有显式的指明某个类的父类, super() 仍然可以有效的工作。
    
    2020-04-17 15:02:41
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
建立联系方法之一 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载