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 中称为:构造函数),在创建实例的时候,就把nameage等属性绑上去:
  • 注意到__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 中面向对象编程的基本概念和应用。掌握这些知识能够帮助你更好地组织和管理代码,提高代码的重用性和可维护性。如果你有任何疑问或想法,欢迎在评论区留言讨论。


  • 68
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 30
    评论
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ziyu_jia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值