7.2 类
至此,你对类是什么应该有了大体的感觉,还可能有点急不可耐,希望我马上介绍如何创建类。介绍这些内容前,先来看看类是什么。
7.2.1类到底是什么
本书前面反复提到了类,并将其用作类型的同义词。从很多方面来说,这正是类的定义——一种对象。每个对象都属于特定的类,并被称为该类的实例。
例如,如果你在窗外看到一只鸟,这只鸟就是“鸟类”的一个实例。鸟类是一个非常通用(抽象)的类,它有多个子类:你看到的那只鸟可能属于子类“云雀”。你可将“鸟类”视为由所有鸟组成的集合,而“云雀”是其一个子集。一个类的对象为另一个类的对象的子集时,前者就是后者的子类。因此“云雀”为“鸟类”的子类,而“鸟类”为“云雀”的超类。
注意 在英语日常交谈中,使用复数来表示类,如birds(鸟类)和larks(云雀)。在Python中,约定使用单数并将首字母大写,如Bird和Lark。
通过这样的陈述,子类和超类就很容易理解。但在面向对象编程中,子类关系意味深长,因为类是由其支持的方法定义的。类的所有实例都有该类的所有方法,因此子类的所有实例都有超类的所有方法。有鉴于此,要定义子类,只需定义多出来的方法(还可能重写一些既有的方法)。
例如,Bird类可能提供方法fly,而Penguin类(Bird的一个子类)可能新增方法eat_fish。创建Penguin类时,你还可能想重写超类的方法,即方法fly。鉴于企鹅不能飞,因此在Penguin的实例中,方法fly应什么都不做或引发异常(参见第8章)。
领取专属 10元无门槛券
私享最新 技术干货