zoukankan      html  css  js  c++  java
  • 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这个类里的方法。

  • 相关阅读:
    win10安装jmeter配置环境路径
    genymotion在mac上的安装
    jmeter的启动
    win10的cmd输入javac的问题
    01 | 你真的懂测试吗?从“用户登录”测试谈起 茹炳晟
    冒烟测试
    软件测试基础知识
    红队指南--第3章 列举
    REDTEAM 指南---第四章 外部侦察
    Red Team 指南-第1章 红队和红队概述
  • 原文地址:https://www.cnblogs.com/emilyliu/p/9098123.html
Copyright © 2011-2022 走看看