重写父类的方法及经典类和新式类的区别
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() ###
以上是关于重写父类的方法及经典类和新式类的区别的主要内容,如果未能解决你的问题,请参考以下文章