所谓双鱼

导航

 

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这个类里的方法。

 

posted on 2018-05-27 23:37  所谓双鱼  阅读(175)  评论(0编辑  收藏  举报