Discuss / Python / 打卡第五天

打卡第五天

Topic source
# 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),# 而被继承的class称为基类、父类或超类(Base class、Super class)。class Animal(object):    def run(self):        print('Animal is running...')# 继承父类的方法class Dog(Animal):    passclass Cat(Animal):    pass#对子类增加方法class Dog(Animal):    def run(self):        print('Dog is running...')    def eat(self):        print('Eating meat...')# 对父类的方法做改进class Dog(Animal):    def run(self):        print('Dog is running...')class Cat(Animal):    def run(self):        print('Cat is running...')    def run_twice(animal):        animal.run()        animal.run()# 当子类和父类都存在相同的run()方法时,我们说,子类的run()覆盖了父类的run(),# 在代码运行的时候,总是会调用子类的run()。这样,我们就获得了继承的另一个好处:多态。# 要理解什么是多态,我们首先要对数据类型再作一点说明。当我们定义一个class的时候,我们实际上就定义了一种数据类型。# 我们定义的数据类型和Python自带的数据类型,比如str、list、dict没什么两样:# 继承可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写。## 动态语言的鸭子类型特点决定了继承不像静态语言那样是必须的。# 对于一个变量,我们只需要知道它是Animal类型,无需确切地知道它的子类型,就可以放心地调用run()方法,# 而具体调用的run()方法是作用在Animal、Dog、Cat还是Tortoise对象上,由运行时该对象的确切类型决定,这就是多态真正的威力:# 调用方只管调用,不管细节,而当我们新增一种Animal的子类时,只要确保run()方法编写正确,不用管原来的代码是如何调用的。

  • 1

Reply