Logo
Section 1 / 12

类与继承

在本课程中,你将学习 Python 中类与继承的概念。

导入

类与继承

在本课程中,你将学习 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。

更好的工具

构造函数和 self