目录
- 专栏列表
- 前言
- 一、面向对象编程概述
- 1.1 类和对象
- 1.2 继承
- 1.3 多态
- 1.4 封装
 
- 二、Python 中的类和对象
- 2.1 定义类
- 2.2 `__init__` 函数解释
- 2.3 创建对象
 
- 三、继承
- 3.1 基本继承
- 3.2 创建子类对象
 
- 四、多态
- 五、封装
- 六. 访问限制
- 七、综合实例
- 结语
 
专栏列表
- Python教程(一):环境搭建及PyCharm安装
- Python 教程(二):语法与数据结构
- Python 教程(三):字符串特性大全
- Python 教程(四):Python运算符合集
- Python 教程(五):理解条件语句和循环结构
- Python 教程(六):函数式编程
- Python 教程(七):match…case 模式匹配
- Python 教程(八):高级特性【高逼格代码】
- Python 教程(九):内置模块与第三方模块
- Python教程(十):面向对象编程(OOP)

正文开始,如果觉得文章对您有帮助,请帮我三连+订阅,谢谢💖💖💖
前言
在现代编程中,面向对象编程(OOP)是一种非常重要的编程范式。Python 作为一种高级编程语言,广泛支持面向对象编程。本篇文章将详细介绍 Python 中 OOP 的基本概念和应用,并通过实例帮助你更好地理解和掌握 OOP。
一、面向对象编程概述
面向对象编程是一种将现实世界中的概念映射到程序中的编程范式。在 OOP 中,基本概念包括类(Class)、对象(Object)、继承(Inheritance)、多态(Polymorphism)和封装(Encapsulation)。
1.1 类和对象
- 类(Class):类是一个模板,用于定义对象的属性和行为。
- 对象(Object):对象是类的实例,通过类创建。
1.2 继承
继承是一种机制,允许一个类(子类)继承另一个类(父类)的属性和方法。这样可以重用代码,减少冗余。
1.3 多态
多态允许不同类的对象以相同的方式调用方法,即使这些方法在不同的类中有不同的实现。
1.4 封装
封装是一种将数据和方法绑定在一起,并隐藏对象的内部实现细节的机制。
二、Python 中的类和对象
2.1 定义类
- 在 Python 中,可以使用 class关键字定义一个类。
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def greet(self):
        print(f"Hello, 我叫 {self.name} ,今年 {self.age} 岁")
2.2 __init__ 函数解释
 
- 由于类可以起到模板的作用,因此,可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。通过定义一个特殊的__init__方法(java 中称为:构造函数),在创建实例的时候,就把name,age等属性绑上去:
- 注意到__init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__init__方法内部,就可以把各种属性绑定到 self,因为 self 就指向创建的实例本身。
- 有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传,Python解释器自己会把实例变量传进去
2.3 创建对象
使用类名调用,可以创建对象(实例)。
user = Person("子羽", 30)
user.greet()  # 输出: Hello, 我叫 子羽 ,今年 30 岁
三、继承
3.1 基本继承
在 OOP 程序设计中,当我们定义一个 class 的时候,可以从某个现有的 class 继承,新的 class 称为子类(Subclass),而被继承的 class 称为基类、父类或超类(Base class、Super class)。
通过继承,可以创建一个新的类,这个新类继承了父类的属性和方法。
例如当我们的 A 类需要继承 B 类,我们可以学成
A(B)
示例代码
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def greet(self):
        print(f"Hello, 我叫 {self.name} ,今年 {self.age} 岁")
class Student(Person):
    def __init__(self, name, age, student_id):
        super().__init__(name, age) # 使用 super() 可以获取父类的方法
        self.student_id = student_id
    def display(self):
        print(f"学号: {self.student_id}")

3.2 创建子类对象
student1 = Student("张三", 20, "S12345")
student1.greet()  # 输出: Hello, 我叫 张三 ,今年 20 岁
student1.display()  # 输出: 学号: S12345
四、多态
多态允许子类定义与父类同名的方法,但是这些方法在不同的类中可以有不同的实现,例如下面的 Teacher 的问候就会跟 Student 的问候不一样
class Teacher(Person):
    def greet(self):
        print(f"Hello, 我是 {self.name} 教授")
teacher1 = Teacher("李春华", 40)
teacher1.greet()  # 输出: Hello, 我是 李春华 教授
五、封装
封装是将数据(属性)和行为(方法)结合在一起,并隐藏内部细节。
class Account:
    def __init__(self, owner, balance=0):
        self.owner = owner
        self.__balance = balance
    def deposit(self, amount):
        self.__balance += amount
    def get_balance(self):
        return self.__balance
account = Account("约翰")
account.deposit(100)
print(account.get_balance())  # 100
六. 访问限制
命名约定
- 公有属性和方法:使用小写字母。
- 私有属性:使用双下划线前缀。
- 受保护的属性:使用单下划线前缀。
示例代码
class Car:
    brand = '宝马' # 类属性:公有属性
    def __init__(self, color):
        self.color = color
        self.__mile = 200000  # 私有
    def get_mile(self):  # 公有方法
        return self.__mile
car = Car('黄色')
print(car.brand) # 宝马
print(car.color) # 黄色
# print(car.__mile) # 'Car' object has no attribute '__mile'
print(car.get_mile()) # 200000

七、综合实例
class Animal:
    def __init__(self, name):
        self.name = name
    def speak(self):
        pass
class Dog(Animal):
    def speak(self):
        return f"{self.name} says Woof!"
class Cat(Animal):
    def speak(self):
        return f"{self.name} says Meow!"
animals = [Dog("小白"), Cat("菊花")]
for animal in animals:
    print(animal.speak())
输出:
小白 says Woof!
菊花 says Meow!
结语
通过本篇文章,我们介绍了 Python 中面向对象编程的基本概念和应用。掌握这些知识能够帮助你更好地组织和管理代码,提高代码的重用性和可维护性。如果你有任何疑问或想法,欢迎在评论区留言讨论。



















