zoukankan      html  css  js  c++  java
  • 讲解一下类的继承super

    class Test1(object):

    def __init__(self,ids):

    self.ids=ids



    class Par(Test1):

    def __init__(self,ids,user):
    super().__init__(ids) #Test1.__init__(self,ids) 等价写法或者super(Par,self).__init(ids) 是super().__init__(ids)缺省写法

    self.user=user


    if __name__ == '__main__':
    A=Par("IS IDS","IS USER")
    print(A.ids,A.user)

    总结:

    1. super().__init__相对于类名.__init__,在单继承上用法基本无差;
    2. 但在多继承上有区别,super方法能保证每个父类的方法只会执行一次,而使用类名的方法会导致方法被执行多次,具体看前面的输出结果;
    3. 多继承时,使用super方法,对父类的传参数,应该是由于python中super的算法导致的原因,必须把参数全部传递,否则会报错;
    4. 单继承时,使用super方法,则不能全部传递,只能传父类方法所需的参数,否则会报错,
    5. 多继承时,相对于使用类名.__init__方法,要把每个父类全部写一遍, 而使用super方法,只需写一句话便执行了全部父类的方法,这也是为何多继承需要全部传参的一个原因。
    6. 不知道是不是重复了:具有两个父类的属性和方法,如果两个父类具有同名方法的时候,就近原则(__init__也是)。

      在调用父类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数;

      重写父类方法,对于父类的方法,如果有不符合子类想要做的事情,可以对父类的方法进行重写,重写时要与父类的方法同名,这样python将不会考虑父类的方法,而只是关注子类定义的相应的方法。

    二。多态:

    多态:同一个方法在不同的类中最终呈现出不同的效果,即为多态。

    class Fruit():
        def name(self):
            print('我是水果')
    
    class Apple(Fruit):
        def name(self):
            print('我是苹果')
    
    
    Fruit().name()
    Apple().name()
  • 相关阅读:
    面向中后台复杂场景的低代码实践思路
    树莓派使用raspivid实时预览视频
    grep rn无法匹配文件中的字符串
    C++有关std::sort和std::bind那些事
    C++有关unordered_map::erase的奇怪bug
    ssh与tar的奇妙组合
    git指定仓库使用特定用户名提交
    在win7下搭建php+apache+mysql环境
    神乎其神的技艺
    好书推荐——《启动大脑》
  • 原文地址:https://www.cnblogs.com/SunshineKimi/p/11906910.html
Copyright © 2011-2022 走看看