上周已经记录过类的许多定义概念,今天接着继承来说说,如何重写父类,以及在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里面都是广度优先