面向对象编程 Python 中的类

介绍

面向对象编程(Object-Oriented Programming,简称 OOP)是一种编程范式,它将相关的数据和操作封装在一起,形成一个对象。Python 是一种支持面向对象编程的高级编程语言,它通过类(class)来实现面向对象编程。

在 Python 中,类是创建对象的模板,它定义了对象的属性和相关的方法。对象是类的实例,可以通过实例化类来创建对象。面向对象编程的核心思想是将问题划分为一系列相互关联的对象,通过对象之间的交互来解决问题。

类的定义和实例化

在 Python 中,可以使用 class 关键字来定义一个类。类名通常采用首字母大写的驼峰命名法。类的定义包含在一个代码块中,可以定义类的属性和方法。

下面是一个简单的示例,定义了一个 Person 类,它包含 nameage 两个属性,并且有一个 say_hello 方法用于打印问候语。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def say_hello(self):
        print(f"Hello, my name is {self.name}. I'm {self.age} years old.")

在上面的示例中,__init__ 方法是一个特殊的方法,用于初始化对象的属性。self 是一个指向当前对象的引用,通过它可以访问对象的属性和方法。

要创建一个对象,可以使用类名后加上一对括号的方式进行实例化。实例化后,可以访问对象的属性和方法。

person = Person("Alice", 25)
print(person.name)  # 输出 "Alice"
print(person.age)   # 输出 25
person.say_hello()  # 输出 "Hello, my name is Alice. I'm 25 years old."

继承和多态

继承是面向对象编程的一个重要概念,它允许创建一个新的类,从现有的类中继承属性和方法。被继承的类称为父类或基类,继承的类称为子类或派生类。

子类可以重写父类的方法,以实现自己特定的行为。这种行为称为多态,它允许在运行时根据实际的对象类型调用正确的方法。

下面是一个示例,定义了一个 Student 类,它继承自 Person 类,并重写了 say_hello 方法。

class Student(Person):
    def __init__(self, name, age, grade):
        super().__init__(name, age)
        self.grade = grade
    
    def say_hello(self):
        print(f"Hello, my name is {self.name}. I'm a student in grade {self.grade}.")

在上面的示例中,super() 函数调用父类的 __init__ 方法来初始化继承的属性。

要创建一个子类的对象,可以使用子类的类名后加上一对括号的方式进行实例化。子类的对象可以调用继承自父类的属性和方法,并且可以调用自己重写的方法。

student = Student("Bob", 15, 9)
print(student.name)      # 输出 "Bob"
print(student.grade)     # 输出 9
student.say_hello()      # 输出 "Hello, my name is Bob. I'm a student in grade 9."

封装和访问控制

封装是面向对象编程的另一个重要概念,它通过将数据和操作封装在对象内部,实现了数据的隐藏和访问的控制。

在 Python 中,可以通过在属性名前加上两个下划线的方式实现私有属性。私有属性只能在对象内部访问,外部无法直接访问。

下面是一个示例,定义了一个 Car 类,它包含私有属性 __mileage 和公有方法 get_mileageadd_mileage

class Car:
    def __init__(self, mileage):
        self.__mileage = mileage