• python学习(三十)私有和继承


    1、私有

    私有方法和私有变量,出了类就不能用

    格式就是在变量或者方法前加两个下划线

    import redis
    class My(object):
        def __init__(self):
            self.__host='xxx'   #私有变量,出了类就不能用了
            self.___port=6379
            self.__password='HK139bc&*'
            self.r=redis.Redis(host=self.host,port=self.port,password=self.password)
            def __close(self):  #私有方法
            print('close')

    实例化后,调用私有变量和私有方法,执行会报错

    my=My()
    print(my.__host)  #私有变量,出了类就不能用
    my.close() #私有方法,出了类就不能用

    只有在类的内部可以调用私有变量和私有函数

    2、继承&重写父类&多继承

    1)继承与重写父类(完全重写父类)

    class Lj(object):
        def __init__(self):
            self.money =10000000
            self.house='大房子'
        def sing(self):
            print('唱歌')
        def dance(self):
            print('跳舞')
        def lm(self):
            print('找朋友')
    class Lxj(Lj): #继承Lj这个类
        def dance(self):
            print('霹雳舞')

    实例化类Lxj

    lj=Lxj()
    lj.sing()
    lj.dance()  #重写了父类的方法,就按照重写的来

    输出结果为:

    唱歌
    霹雳舞

    dance()这个方法,父类有,LXj继承了父类,但又重写了父类的这个方法,所以最后调用的就是自己的dance()方法,而不是父类的

    2)增加父类方法功能

    父类已经有这个方法,但不够完善,在原本的方法里添加新功能

    class Zll():
        def smile(self):
            print('hhhh')
    class Xz(Zll): #多继承
        def smile(self):   #重写父类方法
            Zll().smile()  #调用父类的方法
            print('呵呵呵')
    
    xz=Xz()
    xz.smile()

    重写父类的方法smile(),但不是不要父类该方法的功能,所以先调用父类方法,再增加自己的方法,输出结果为:

    hhhh
    呵呵呵

    调用父类还可以用super()方法

    class Zll():
        def smile(self):
            print('hhhh')
    class Xz(Zll): #多继承
        def smile(self):   #重写父类方法
            super(Xz,self).smile()  #自动帮找到父类,调用父类方法
            print('呵呵呵')
    
    xz=Xz()
    xz.smile()

    输出结果也是一样的

    3)多继承

    一个类可以继承多个类,可以调用多个类的方法

    class Zll():
        def smile(self):
            print('hhhh')
    class Ds():
        def smile(self):
            print('安安安安')
    class Xz(Zll): #多继承
        def smile(self):   #重写父类方法
            Zll().smile()  #调用父类的方法
            Ds().smile()  #调用哪个父类方法,使用哪个父类的方法
            print('呵呵呵')
    
    xz=Xz()
    xz.smile()

    多继承重写父类的时候,如果使用super()方法,会按照顺序,一次找每个父类,如果找到该方法,就不会往后找了

    class Zll():
        def smile(self):
            print('hhhh')
    class Ds():
        def smile(self):
            print('安安安安')
    class Xz(Zll): #多继承
        def smile(self):   #重写父类方法
            super(Xz,self).smile()  多继承的时候,按顺序找父类里这个方法,找到后,就不往后找了
            print('呵呵呵')
    
    xz=Xz()
    xz.smile()

    因为继承的两个类都要smile()方法,现在重写父类这个方法,就按照顺序先去Zll这个类连找smile()方法,找到了,那就调用这个方法,不会再去Ds这个类里的方法。

  • 相关阅读:
    转贴"三个月内通过Adsense赚一百万美金"
    今天申请了Google Adsense
    Asp.Net Core 多样性的配置来源
    Identity第二章
    Identity第一章
    Identity第三章 Authorize原理解析
    async和await
    ASP.Net Core简介
    【学习笔记】后缀数组 SA
    题解 [NOI2009] 植物大战僵尸
  • 原文地址:https://www.cnblogs.com/emilyliu/p/9098123.html
Copyright © 2020-2023  润新知