• 04 Python的继承、方法重写、super()类、父类私密属性的调用


    继承

    A类继承B类,A即可获得B类的全部公共属性和方法(包括内置属性和方法)。格式如:class A(B):

    class Animal:
        def sleep(self):
            print("zZZ...")
    
        def eat(self):
            print("yamiyami...")
    
        def run(self):
            print("huchihuchi...")
    
    
    class Dog(Animal): #Dog类拥有sleep,eat,run,bark四个方法
        def bark(self):
            print("汪汪汪") 
    

     

    方法重写

    子类有时需要对继承自父类的方法进行修改或重写,这时直接定义一个与需要重写的方法名一样的方法即可,如(接上面的代码):

    class xiaotianquan(Dog):
        def fly(self):
            print("我在飞")
        #重写继承自父类的bark()方法
        def bark(self):
            print("我在叫!我在叫!")
    

      

    父类方法扩展

    有时仅需对父类方法进行扩展无需完全重写,只需在重写方法时加上super().父类方法 即可:

    class xiaotianquan(Dog):
        #扩展继承自父类的bark()方法
        def bark(self):
            #继承父类的方法
            super().bark() #此时super()即代表父类(此时的父类为Dog)
            #需要拓展的代码
            print("我在叫!我在叫!")
    

      super类是一个特殊的类,super()代表着一个super类的实例

    Python2.x版本调用父类方法(了解,不推荐)

    在Python2.x版本中,子类重写或拓展父类方法时,不是使用super()调用,而是使用:父类名.父类方法(self) #注意,self不能省略

    class xiaotianquan(Dog):
        #扩展继承自父类的bark()方法
        def bark(self):
            #继承父类的方法
            Dog.bark(self) #self不能省略
            #需要拓展的代码
            print("我在叫!我在叫!")
    

      注意:super().方法名 与 父类名.方法名(self),开发中不能混用,只能使用一种,且推荐super().方法名这种

    父类的私有属性和方法的调用

    子类无法直接访问父类的私有属性(可以但不推荐),但可以通过父类中的公共方法来调用私有属性和方法:

    class A:
        def __init__(self):
            self.__age = 18
    
        def __fuck(self):
            print("你不能搞我")
    
        def get_age(self):
            return self.__age
    
        def force(self):
            self.__fuck()
    
    
    class B(A):
        def __init__(self):
            super().__init__() #非常重要!!没有这行代码就没有继承自父类的_A__age属性
            name = "xiaoli"
    
    
    xiaoli = B()
    print(xiaoli.get_age())
    xiaoli.force()
    

      运行结果:

    E:python3python3.exe F:/PycharmProjects/project3-class/xh_13_调用父类方法中的私有属性和方法.py
    18
    你不能搞我
    
    Process finished with exit code 0
    

      

  • 相关阅读:
    一分钟理解APM,把流失的用户找回来
    oauth2.0在监控宝项目中的应用一例
    数据路由,你造吗?
    Laravel的Ioc设计
    java使用默认线程池踩过的坑(三)
    java使用默认线程池踩过的坑(二)
    java使用默认线程池踩过的坑(一)
    hadoop中mapreduce的常用类(二)
    hadoop中mapreduce的常用类(一)
    16.9.5上午
  • 原文地址:https://www.cnblogs.com/Scorpicat/p/11718194.html
Copyright © 2020-2023  润新知