类与继承
在本课程中,你将学习 Python 中类与继承的概念。
类定义
类 描述了一种新的对象类型,并将操作该类型对象所需的方法捆绑在一起。这里有一个类比:一个类就像一份蛋糕配方,而对象则是按照这个配方制作出的蛋糕。
定义类
定义类的语法如下:
1class ClassName(父类): 2 变量和方法的定义
继承简介
每个类(除了 object 类)都有一个父类,并且会继承来自该父类的变量和方法。也就是说,所有在(或从父类继承的)父类中定义的变量和方法,都可以被新类使用。
例如,你可以定义一个名为 Person 的类,包含变量 name 和 age,以及一个方法 greet。该类的每个对象都会拥有自己独立的 name 和 age 变量副本,以及对 greet 方法的独立引用。如果你随后创建一个 Customer 类作为 Person 的子类,那么每个 Customer 类型的对象都将拥有自己的 name 和 age 变量,以及 greet 方法。此外,它还会拥有你在 Customer 类中声明的任何额外变量和方法(例如,购买记录列表)。
object 类简介
特殊的 object 类是所有类的“根”类。当你定义一个类时,如果省略了父类,它默认的父类就是 object。每个类都直接或间接地继承自 object。
术语说明:作为名词时,“实例”与“对象”含义相同。但我们通常在提到某个具体对象时使用“实例”(如
john是Person的一个实例),或者在用作形容词时使用(如name是Person类的一个实例变量)。
术语说明:“字段”是“实例变量”的另一种说法。
下面是一个类定义的例子:
1class Person(object): 2 # 定义 Person 类的变量 3 name = 'Joe' 4 age = 23 5 6 # 定义方法 7 def say_hi(self): 8 print("Hello, Joe.")
我们可以对上述示例进行多种操作:
- 要创建类的一个实例(对象),可以像调用函数一样使用类名,例如:
p = Person()。 - 我们可以使用点号表示法来访问对象
p的字段:p.name的值是 "Joe",p.age的值是 23。 - 我们可以修改对象
p的字段,例如通过语句p.name = 'Jack'。 - 我们也可以使用点号表示法与对象
p进行交互,更正式地说,是“向对象p发送消息”:p.say_hi()会命令p执行say_hi操作,p将输出Hello, Joe.。
命名约定:类名始终以大写字母开头,而变量名和函数名则始终以小写字母开头。
以下代码示例有助于你更好地理解这些概念。
1class Person(object): 2 # 定义 Person 类的变量 3 name = 'Joe' 4 age = 23 5 6 # 定义方法 7 def say_hi(self): 8 print("Hello, Joe.") 9 10 11p = Person() # 创建 Person 类的实例 12 13print('name:', p.name, 'age:', p.age) # 访问 Person 类的 name 和 age 变量 14 15p.name = 'Jack' # 修改 Person 类的 name 属性 16print('name:', p.name, 'age:', p.age) # 可以看到(name 改变,age 不变) 17 18p.say_hi() # 调用 say_hi 方法
遗憾的是,我们从这个类创建的每一个实例都会是完全相同的。我们希望创建具有不同 name 和 age 值的 Person 实例。为此,我们需要了解一个特殊变量:self。