1.覆盖父类方法
2.对父类方法进行扩展
class Animal:
def eat(self):
print('吃')
def drink(self):
print('喝')
def run(self):
print('跑')
def sleep(self):
print('睡')
class Cat(Animal):
def call(self):
print('喵喵~')
class Hellokitty(Cat):
def speak(self):
print('我可以说日语~')
def call(self):
# 调用原本在父类中封装的方法
#Cat.call(self)
super().call() # 只在python3中支持
print('#@!#@!#@!')
hk = Hellokitty()
hk.speak()
hk.call()
多继承
子类拥有一个父类叫做单继承
子类可以拥有多个父类,并且具有所有父类的属性和方法
多继承的注意事项:
问题的提出:
如果不同的父类中存在同名的方法,子类对象在调用方法时,会调用哪一个父类中的方法呢?
提示:开发时,应尽量避免这种容易产生混淆的情况
如果父类之间存在同名的属性或方法,因该尽量避免使用多继承
例如:
class A:
def test(self):
print('A----test 方法')
def demo(self):
print('A----demo 方法')
class B:
def test(self):
print('B----test 方法')
def demo(self):
print('B----demo 方法')
class C(A,B):
pass
c = C()
c.test()
c.demo()
注意:如果父类中存在同名的方法,在最后调用的时候谁在前调用谁的方法。
新式类和旧式(经典)类:
object是Python为所有对象提供的基类,提供有一些内置的属性和方法,可以使用dir函数查看
新式类:以object为基类的类,推荐使用
经典类:不以object为基类的类,不推荐使用
在python3.X中定义的类时,如果没有指定父类,会默认使用object作为基类–python3.x中定义的类都是新式类
在python2.x中定义类时,如果没有指定父类,则不会以object作为基类
推荐使用新式类
新式类和旧式类在多继承时—会影响到方法的搜索顺序
为保证编写的代码能够同时在python2.x和python3.x运行
今后在定义类时,如果没有父类,建议统一继承自object