Python 类和对象

在第一部分中,我们学习了 Python 的基本语法、数据类型、控制流语句以及函数。在第二部分中,我们将更深入地学习 Python 的高级特性,例如面向对象编程、异常处理、文件处理和模块化编程。

面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,将数据和行为封装在对象中。Python 是一种支持面向对象编程的语言,它可以使用类(class)来创建对象。

当我们需要处理某些具有相同属性和方法的对象时,类和对象就成为了一个重要的解决方案。类是一种用户自定义的数据类型,它包含了一些方法和属性的定义,用来描述对象的特征和行为。而对象则是类的实例化,它是由类创建的具有特定属性和方法的实体。

类的定义

在 Python 中,可以使用 class 关键字来定义一个类,如下所示:

class Person:
    # 类属性
    species = 'human'

    # 构造函数
    def __init__(self, name, age):
        # 实例属性
        self.name = name
        self.age = age

    # 实例方法
    def say_hello(self):
        print(f'Hello, my name is {self.name}, and I am {self.age} years old.')

在这个代码中,我们定义了一个名为 Person 的类,它包含一个类属性 species ,一个构造函数 init 和两个方法 say_hello 和 set_species 。构造函数 init 用于创建实例对象,并初始化实例属性。实例方法 say_hello 用于打印一条问候语,并使用到实例属性 self.name 和 self.age 。

创建对象

在 Python 中,可以使用类来创建对象。在创建对象时,会自动调用类的构造函数,如下所示:

p1 = Person('Alice', 25)
p2 = Person('Bob', 30)

p1.say_hello()  # 输出Hello, my name is Alice, and I am 25 years old.
p2.say_hello()  # 输出Hello, my name is Bob, and I am 30 years old.

在上面的代码中,我们分别使用类 Person 了两个对象 p1 和 p2 ,并分别调用了它们的实例方法 say_hello 。

访问属性

在 Python 中,对象的属性可以通过点运算符来访问,如下所示:

print(p1.name)  # 输出Alice
print(p2.age)   # 输出30

在上面的代码中,我们分别访问了对象 p1 和 p2 的属性 name 和 age ,并将它们打印出来。

继承

在 Python 中,类可以继承其他类的属性和方法。被继承的类被称为父类或基类,继承它的类被称为子类或派生类。子类可以覆盖父类的方法,并添加自己的属性和方法。

例如,下面的代码定义了一个子类 Student ,它继承了父类 Person 的属性和方法,并添加了自己的属性和方法:

class Student(Person):
    def __init__(self, name, age, major):
        super().__init__(name, age)
        self.major = major

    def say_hello(self):
        print(f"Hello, my name is {self.name}, and I am {self.age} years old. My major is {self.major}.")

s1 = Student('Charlie', 20, 'Computer Science')
s2 = Student('David', 22, 'Mathematics')

s1.say_hello()  # 输出Hello, my name is Charlie, and I am 20 years old. My major is Computer Science.
print(s2.species)   # 输出human
print(s2.major)   # 输出Mathematics

在这个例子中,我们定义了一个子类 Student ,它继承了 Person 类。子类 Student 有一个新的属性 major ,表示学生的专业。在子类中,我们重写了父类的实例方法 say_hello ,添加了一个新的输出信息 —— 学生的专业。在子类 Student 的构造函数中,我们调用了父类 Person 的构造函数,以初始化父类的属性 name 和 age 。这是通过调用 super().init(name, age) 来实现的。

在定义好 Student 类后,我们使用它创建了两个 Student 对象 s1 和 s2 ,并使用它们的实例方法 say_hello 来打印输出。我们还访问了对象s2的属性 species 和 major ,其中属性 species 是从父类 Person 继承而来的。


以上就是 Python 中类和对象的基本用法,它们是面向对象编程的基石,可以使我们更方便地组织和管理代码,提高代码的可维护性和重用性。在下一节中,我们将介绍 Python ....