[Python]一、Python基础编程(3)

news/2024/9/22 5:07:46/

F:\BaiduNetdiskDownload\2023人工智能开发学习路线图\1、人工智能开发入门\1、零基础Python编程 

1. 面向对象-其他

1.1 面向对象三大特征

封装
        将属性和⽅法书写到类的⾥⾯的操作即为封装
        封装可以为属性和⽅法添加私有权限
继承
        ⼦类默认继承⽗类的所有属性和⽅法
        ⼦类可以重写⽗类属性和⽅法
多态
        传⼊不同的对象,产⽣不同的结果

面向对象编程(OOP)的三大特征是封装继承多态。以下是对这三大特征的详细说明:

1. 封装(Encapsulation)

定义
封装是将数据和操作数据的方法结合在一起,形成一个独立的对象。通过封装,内部实现细节可以隐藏,外部只能通过公开的方法访问和修改对象的状态。

优点

  • 数据保护:可以防止外部直接访问和修改对象的内部状态。
  • 接口简化:通过提供公共方法,简化了与对象的交互。
  • 维护性:更改内部实现时,不会影响外部代码,只需确保公开的方法保持不变。

示例

python

复制

class BankAccount:def __init__(self, balance=0):self.__balance = balance  # 私有属性def deposit(self, amount):if amount > 0:self.__balance += amountdef withdraw(self, amount):if 0 < amount <= self.__balance:self.__balance -= amountdef get_balance(self):return self.__balance  # 公开方法访问私有属性account = BankAccount()
account.deposit(100)
print(account.get_balance())  # 输出: 100

2. 继承(Inheritance)

定义
继承是指一个类(子类)可以继承另一个类(父类)的属性和方法。通过继承,可以实现代码的重用和扩展。

优点

  • 代码重用:避免重复编写相同的代码。
  • 扩展性:可以在子类中扩展或修改父类的功能。
  • 层次结构:形成清晰的类层次结构,便于管理和维护。

示例

python

复制

class Animal:def speak(self):return "Animal sound"class Dog(Animal):def speak(self):return "Bark"class Cat(Animal):def speak(self):return "Meow"dog = Dog()
cat = Cat()
print(dog.speak())  # 输出: Bark
print(cat.speak())  # 输出: Meow

3. 多态(Polymorphism)

定义
多态是指不同类的对象可以通过相同的接口(方法)进行操作。具体执行的操作取决于对象的实际类型,而不是引用的类型。

优点

  • 灵活性:可以用相同的方式处理不同类型的对象。
  • 可扩展性:可以很容易地添加新类型而不影响现有代码。

示例

python

复制

def animal_sound(animal):print(animal.speak())animal_sound(Dog())  # 输出: Bark
animal_sound(Cat())  # 输出: Meow

总结

  • 封装:保护对象的内部状态,通过公共方法进行交互。
  • 继承:允许子类继承和扩展父类的功能,促进代码重用。
  • 多态:通过相同的接口处理不同类型的对象,提高代码的灵活性和可扩展性。

这三大特征共同构成了面向对象编程的基础,使得软件设计更加模块化、可维护和易于扩展。

1.2 多态

多态指的是⼀类事物有多种形态,(⼀个抽象类有多个⼦类,因⽽多态的概念依赖于继承)。
        定义:多态是⼀种使⽤对象的⽅式,⼦类重写⽗类⽅法,调⽤不同⼦类对象的相同⽗类⽅法,可以产⽣不同的执⾏结果
        好处:调⽤灵活,有了多态,更容易编写出通⽤的代码,做出通⽤的编程,以适应需求的不断变化!
        实现步骤:
                定义⽗类,并提供公共⽅法
                定义⼦类,并重写⽗类⽅法
                传递⼦类对象给调⽤者,可以看到不同⼦类执⾏效果不同

举例说明Python中多态的定义 ,好处和实现步骤

多态是面向对象编程中的一个重要特性,它允许不同类的对象通过相同的接口进行操作。下面是关于多态在 Python 中的定义、好处和实现步骤的详细说明。

多态的定义

在 Python 中,多态指的是不同类的实例可以使用相同的方法名,但实现的方式可以不同。通过这种方式,程序可以更灵活地处理不同类型的对象。

多态的好处

  1. 灵活性

    • 可以使用相同的接口处理不同类型的对象,增强了代码的灵活性。
  2. 可扩展性

    • 新的类可以很容易地被添加到系统中,而不需要更改现有代码。
  3. 提高可读性

    • 代码更具可读性,因为它使用统一的接口来处理不同的对象。

实现步骤

  1. 定义一个父类

    • 创建一个父类,定义一个方法(接口),这个方法会在子类中被重写。
  2. 定义子类

    • 创建一个或多个子类,重写父类的方法以实现不同的行为。
  3. 使用多态

    • 创建子类的实例,并通过父类的引用调用重写的方法。
示例

以下是一个具体的示例,展示了如何在 Python 中实现多态。

1. 定义一个父类

python

复制

class Animal:def speak(self):raise NotImplementedError("子类必须实现这个方法")
2. 定义子类

python

复制

class Dog(Animal):def speak(self):return "Bark"class Cat(Animal):def speak(self):return "Meow"class Cow(Animal):def speak(self):return "Moo"
3. 使用多态

python

复制

def animal_sound(animal):print(animal.speak())# 创建对象
dog = Dog()
cat = Cat()
cow = Cow()# 使用多态
animal_sound(dog)  # 输出: Bark
animal_sound(cat)  # 输出: Meow
animal_sound(cow)  # 输出: Moo

总结

  • 多态的定义:不同类的对象可以通过相同的方法名进行操作,具体执行的行为取决于对象的实际类型。
  • 好处:提供灵活性、可扩展性和提高代码可读性。
  • 实现步骤
    1. 定义一个父类并声明方法。
    2. 创建子类并重写父类的方法。
    3. 使用父类的引用调用子类的方法。

通过这种方式,多态使得代码更加灵活且易于扩展,适应不同的需求。

如何在实际项目中应用多态?

多态在实际项目中的应用非常广泛,特别是在设计灵活和可扩展的系统时。以下是一些常见的多态应用场景,以及相关示例。

1. 图形绘制应用

在图形绘制应用中,可以使用多态来处理不同类型的形状(如圆形、矩形等),而不需要知道具体的形状类型。

示例

python

复制

class Shape:def draw(self):raise NotImplementedError("子类必须实现这个方法")class Circle(Shape):def draw(self):return "Drawing a Circle"class Rectangle(Shape):def draw(self):return "Drawing a Rectangle"class Triang

http://www.ppmy.cn/news/1528696.html

相关文章

MongoDB解说

MongoDB 是一个流行的开源 NoSQL 数据库&#xff0c;它使用了一种被称为文档存储的数据库模型。 与传统的关系型数据库管理系统&#xff08;RDBMS&#xff09;不同&#xff0c;MongoDB 不使用表格来存储数据&#xff0c;而是使用了一种更为灵活的格式——JSON 样式的文档。 这…

《使用 LangChain 进行大模型应用开发》学习笔记(四)

前言 本文是 Harrison Chase &#xff08;LangChain 创建者&#xff09;和吴恩达&#xff08;Andrew Ng&#xff09;的视频课程《LangChain for LLM Application Development》&#xff08;使用 LangChain 进行大模型应用开发&#xff09;的学习笔记。由于原课程为全英文视频课…

vue3+ts+supermap iclient3d for cesium功能集合

会把各项功能链接放在这 1.vue3配置supermap iclient3d for cesium vue3中使用supermap icilent3d for cesium_npm 引入supermapgis-CSDN博客 2.功能 2.1加载天地图&#xff0c;加载地形&#xff0c;夸大地形 supermap icilent3d for cesium加载地形并夸大地形-CSDN博客 …

简单了解微服务--黑马(在更)

认识微服务 单体架构 不适合大型复杂项目 微服务架构 将单体结构的各个功能模块拆分为多个独立的项目 拆取的独立项目分别开发&#xff0c;在部署的时候也要分别去编译打包&#xff0c;分别去部署&#xff0c;不同的模块部署在不同的服务器上&#xff0c;对外提供不同的功能…

特殊类的设计与类型转换

特殊类的设计 1.请设计一个不能被拷贝的类 拷贝只会放生在两个场景中&#xff1a;拷贝构造函数以及赋值运算符重载&#xff0c;因此想要让一个类禁止拷贝&#xff0c;只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。 C98 C98是怎么设计的呢&#xff1f; class Cop…

GRU是门控循环单元是什么?

GRU是门控循环单元&#xff08;Gated Recurrent Unit&#xff09;的简称&#xff0c;它是循环神经网络&#xff08;RNN&#xff09;的一种变体。GRU旨在解决传统RNN中存在的长期依赖问题和反向传播中的梯度消失或梯度爆炸问题。与另一种流行的RNN变体LSTM&#xff08;长短期记忆…

c++249多态

#include<iostream> using namespace std; class Parent { public:Parent(int a){this->a a;cout << " Parent" << a << endl;} public:virtual void print()//在子类里面可写可不写 {cout << "Parent" <<a<&l…

Java 线程之间如何通信?

Java 线程之间如何通信? 文章目录 Java 线程之间如何通信?1. 共享内存2. 消息传递3. 并发库中的工具类4. 线程池中的任务提交与结果获取5. 内存一致性6. Java 8 引入的并行流在 Java 中,线程之间的通信是并发编程中的一个重要问题。线程之间的通信主要有两种方式:共享内存和…