重写父类的方法及经典类和新式类的区别

Posted 测试的自我放逐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重写父类的方法及经典类和新式类的区别相关的知识,希望对你有一定的参考价值。

1.父类重写的实例展示 (继承才有父类)

# coding=utf-8

class Zll():

         # def smile(self):

         #      print(‘哈哈哈‘)

         #      return ‘aa‘

         pass

 

class Dcg():

         def smile(self):

                   print(‘啊啊啊啊啊‘)

 

class Lw():

         def smile(self):

                   print(‘嘿嘿嘿‘)

 

class Xz(Zll,Dcg,Lw):   #继承多个父类依次找父类是否有该方法,有就调用。

         def smile(self):   #重写父类的方法

                   # Dcg().smile()  #调用了父类   通过Dcg().实例化再调用。指定了父类

                   # super(Xz,self).smile()  #这个自动帮你找到父类的   super 后面写自己 和上述方法一样效果(貌似高逼格),修改父类的构造方法

                   print(‘呵呵呵‘)

x = Xz()  #实例化

x.smile()  #调用

对于父类使用的两种需求:

#1、父类的方法一点用的没有,我重新写的 比如重写smile方法。

#2、 父类有这个方法,但是呢,它的功能不够完善,给这个方法在原有的基础上,再

#给他添加一些新功能,比如子类中直接调用父类的方法。

 

 

2. 经典类和新式类的区别:

      1) #pthon2里面,多继承的时候

        #经典类是深度优先,

        # 新式类是广度优先

        #python3里面都是广度优先

        2)python2 经典类里面不能用super

            python3里面经典类和新式类没有任何的区别。

例子

class My:

         pass

class My2(object):   #新式类

         pass

#python3里面没有任何的区别

深度和广度优先(python2中)

class A(object):      #这样就广度优先

    def x(self):

        print(‘A‘)

class B(A):

    # def x(self):

    #     print(‘B‘)       

    pass

class C(A):

    def x(self):

        print(‘C‘)

 

class D(B,C):

    pass

s = D()     ###  结果找B  没有就找A  最后C(深度优先,经典类)

s.x()      ###

 

以上是关于重写父类的方法及经典类和新式类的区别的主要内容,如果未能解决你的问题,请参考以下文章

经典类和新式类的区别

经典类和新式类的区别,c3算法

python中新式类和经典类

八类

Python中的广度优先和深度优先

新式类 VS 经典类