Python入门 17-13
- 今天去看了《天气之子》
笔记部分
继承和多态
- 一个例子
class Animal(object):
def run(self):
print(‘Animal is running…’)
class Dog(Animal):
pass
class Cat(Animal):
pass
- 可以对子类增加一些方法
class Dog(Animal):
def run(self):
print(‘Dog is running…’)
- isinstance()
isinstance(a, list)
True
isinstance(b, Animal)
True
isinstance(c, Dog)
True
Dog可以看成Animal,但Animal不可以看成Dog
- 多态的好处
当我们需要传入Dog、Cat、Tortoise……时,我们只需要接收Animal类型就可以了,因为Dog、Cat、Tortoise……都是Animal类型,然后,按照Animal类型进行操作即可。由于Animal类型有run()方法,因此,传入的任意类型,只要是Animal类或者子类,就会自动调用实际类型的run()方法,这就是多态的意思:
对于一个变量,我们只需要知道它是Animal类型,无需确切地知道它的子类型,就可以放心地调用run()方法,而具体调用的run()方法是作用在Animal、Dog、Cat还是Tortoise对象上,由运行时该对象的确切类型决定,这就是多态真正的威力:调用方只管调用,不管细节,而当我们新增一种Animal的子类时,只要确保run()方法编写正确,不用管原来的代码是如何调用的。
- 再谈静态语言与动态语言的区别
对于静态语言(例如Java)来说,如果需要传入Animal类型,则传入的对象必须是Animal类型或者它的子类,否则,将无法调用run()方法。
对于Python这样的动态语言来说,则不一定需要传入Animal类型。我们只需要保证传入的对象有一个run()方法就可以了