本文主要是介绍小白学python之继承与多态_学习笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本文以廖雪峰的官方网站为参考来学习python的。其学习链接为廖雪峰小白学python教程。
本文是学习到python的继承与多态。参考链接廖雪峰python继承与多态。
class Animal(object):def run(self):print('Animal 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...')dog = Dog()
dog.run()cat = Cat()
cat.run()
输入上列代码,可以得到结果:
Dog is running...
Cat is running...
a = list()
b = Animal()
c = Dog()print(isinstance(a, list))
print(isinstance(b, Animal))
print(isinstance(c, Dog))
运行程序后,结果为:
True
True
True
print(isinstance(c,Animal))
b = Animal()
print(isinstance(b,Dog))
运行程序后,结果为:
True
False
笔记:在继承关系中,如果一个实例的数据类型是某个子类,那它的数据类型也可以被看做是父类。但是,反过来就不行。
def run_twice(animal):animal.run()animal.run()
run_twice(Animal())
run_twice(Dog())
run_twice(Cat())class Tortoise(Animal):def run(self):print('Tortoise is running slowly...')
run_twice(Tortoise())
运行结果为:
Animal is running...
Animal is running...
Dog is running...
Dog is running...
Cat is running...
Cat is running...
Tortoise is running slowly...
Tortoise is running slowly...
笔记:
“开闭”原则:
对扩展开放:允许新增Animal
子类;
对修改封闭:不需要修改依赖Animal
类型的run_twice()
等函数。
笔记:
静态语言 vs 动态语言
对于静态语言(例如Java)来说,如果需要传入Animal
类型,则传入的对象必须是Animal
类型或者它的子类,否则,将无法调用run()
方法。
对于Python这样的动态语言来说,则不一定需要传入Animal
类型。我们只需要保证传入的对象有一个run()
方法就可以了:
笔记:
小结
继承可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写。
动态语言的鸭子类型特点决定了继承不像静态语言那样是必须的。
这篇关于小白学python之继承与多态_学习笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!