python学习笔记-day10-【 类的扩展: 重写父类,新式类与经典的区别】

上周已经记录过类的许多定义概念,今天接着继承来说说,如何重写父类,以及在Python2与python3中中经典类与新式类的区别。

一、重写父类

1、重写,继承父类方法,方法定义完全一样,只是子类实现换成了子类所特有的特性。

class Zll():
    def smile(self):
        print('哈哈哈哈')


class Xz(Zll,Dcg):
    def smile(self):#重写父类的方法
        print('呵呵呵')

2、重写父类方法,但是还想保持父类本身的实身,子类本身也有自己的实现

class Zll():
    def smile(self):
        print('哈哈哈哈')

    def smile2(self):
        print('哈哈哈哈')

class Dcg():
    def smile2(self):
        print('啊啊啊啊')

class Xz(Zll,Dcg):
    def smile(self):#重写父类的方法
        print('呵呵呵')

    def smile2(self): #重写父类的方法
        # Zll().smile2() #调用了父类
        super(Xz, self).smile2()  #这个自动帮你找到父类的
        #如果是单继承的时候,Zll().smile2()与super(Xz, self).smile2()一样
        #如果是多继承的时候,super(Xz, self).smile2()会先找到谁就会用谁了,不会再进行多次调用父类
        print('呵呵呵')

#1、父类的方法一点用的没有,我重新写
#2、父类有这个方法,但是呢,它的功能不够完善,
#   给这个方法在原有的基础上,加上


# x = Xz()
# x.smile2()

二、经典类与新式类的区别

1、python3中两者的区别

#经典类与新式类的区别

class My:
    pass
class My2(object):
    pass
#在python3是没有任何区别的

2、python2中两者的区别

class My:
    pass
class My2(object):
    pass


#在python2里是有区别的
#在python2里面,一个是深度优先,一个是广度优先


#python2里
#经典类是深度优先

#新式类
#新式类是广度优先

#在pyton2经典类里面不能调用super
#在python3里面都是广度优先
 

  

猜你喜欢

转载自www.cnblogs.com/shmily2018/p/9094577.html