Python 从入门到实战21(面向对象简介)

        我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。

上篇文章我们讨论了函数的相关知识。今天我们将学习一下面向对象的基础知识。

python 是面向对象的设计语言,面相对象object oriented 缩写字母OO,面向对象编程object oriented programming 缩写 OOP。面向对象编程(OOP)是一种程序设计思想,它利用“对象”来封装数据(属性)和操作那些数据的方法,并通过“继承”和“多态”来定义不同的类以及它们之间的关系。

在Python中,可以通过定义类(class)和实例化对象(object)来实现面向对象编程。

1、对象的理解

对象是一个抽象的概念,用于表示任意存在的事物。世间万物皆为对象。

通常将对象划分为两部分,即静态部分和动态部分。静态部分被称为:“属性”,任何对象都具备自身属性,如人的性别。动态部分指对象的行为,即对象执行的动作,如人可以行走,鸟儿可以飞翔。

注意:在python中,一切都是对象,也就是说,不仅是具体的事物被称为对象,字符串、列表、字典等都被称作对象。

在Python实际应用中,对象是类的实例。类定义了对象的基本结构和行为,而对象则是具体的实体,拥有类所定义的属性和方法。

举例说明:

#类的练习
class Person:  #类的名称一般第一个字母大写

    def __init__(self,name,age):#构造方法
        self.name = name
        self.age = age

    def greet(self):
        print("hello,I am {:s} and I am {:d} years old.".format(self.name,self.age))
        #通过.format()来输出对应的形式

xiaomi=Person("xiaomi",10)  #创建对象的实例
xiaomi.greet()  #通过实例调用greet 方法

输出结果:

2、类的理解

类是封装对象的属性和行为的载体。反过来说,具有相同属性和行为的一类实体被称为类。

类的定义‌:在Python中,使用class关键字来定义一个类。类体中可以包含类变量、方法、属性等。类变量在整个实例化的对象中是公用的,而实例变量则是在每个实例中独立的。

类的属性和方法‌:类可以包含属性和方法。属性用于存储数据,而方法用于执行操作。类变量在所有实例之间共享,而实例变量则每个实例都有自己的一份拷贝。

类的实例化‌:定义类之后,需要创建类的实例才能使用。创建实例的过程称为实例化。实例化时,可以使用类名和参数列表来创建对象。

如定义一个大雁类,即Geese,在该类中,可以定义每个对象共有的属性和方法;而一只要从北方飞往南方的大雁则是大雁类的一个对象,即wildGeese,对象是类的实例。

class Geese:
    '''
   
大雁类的练习
    '''
   
def __init__(self,claw,wing):#有属性像翅膀,爪子
        self.claw = claw
        self.wing = wing
    def fly(self):
        print("I LIKE FLY!")
claw1 = "爪子很有力,是圆形的"
wing1 = "翅膀很长"
southGeese = Geese(claw1, wing1)   #创建大雁类的实例
southGeese.fly()

输出结果:

3、面向对象程序设计的特点

面向对象设计由3个主要的特征,即封装、继承、多态。

1)封装性

封装是面向对象编程的核心思想,将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体就是类。通过封装思想保证了类内部数据结构的完整性,使用该类的用户不能直接看到类中的数据结构,而只能执行类允许公开的数据。

封装是面向对象编程(OOP)的四大基本原则之一,旨在通过私有变量和私有方法的设置,实现隐藏对象的属性和实现细节,允许外部通过公共的访问方式与内部进行交互,同时限制直接访问对象的内部状态,以保护数据的安全性和完整性。

在Python中,封装主要通过以下几种方式实现:

  1. ‌私有变量‌:通过在变量名前添加双下划线(__),如__xxx,可以将变量设置为私有。这种方式在类内部可以使用,但在类外部无法直接访问。例如,self.__A是一个私有变量,只能在类内部使用。
  2. ‌私有方法‌:类似地,通过在方法名前添加双下划线(__),如__foo,可以将方法设置为私有。私有方法同样只能在类内部使用,外部无法直接调用。
  3. ‌property属性‌:除了私有变量和私有方法外,Python还提供了property属性,这是一种特殊的属性,可以将一个方法变成属性调用,同时保留方法的灵活性。

封装的目的在于:

  • 保护隐私数据和方法,明确内外区分。
  • 隔离复杂的实现方法,使得对象的使用更加简单。
  • 提高代码的复用性。
  • 隔离变化和复杂性。
  • 提高安全性。

通过封装,我们可以控制属性的读和修改的访问级别,将抽象得到的数据和行为结合成一个有机的整体,即类。这样不仅增强了代码的可读性和可维护性,还确保了数据的一致性和完整性‌。

2)继承性

在Python中,类可以继承自一个或多个父类。子类会继承父类的所有公有(public)和保护(protected)属性与方法。在Python中,继承性可以通过关键字class和冒号:来声明。

举例说明:

#类的练习
class Person:  #类的名称一般第一个字母大写

    def __init__(self,name,age):#构造方法
        self.name = name
        self.age = age

    def greet(self):
        print("hello,I am {:s} and I am {:d} years old.".format(self.name,self.age))
        #通过.format()来输出对应的形式
#继承的练习
class Child(Person):  #继承Person 类

    def goschool(self):   #添加自己的行为函数
        print("I am a child,I need to go to school!")
a_child = Child("xiaohua",7)  #复用父类的属性
a_child.greet()#复用父类的方法
a_child.goschool()

在这个例子中,Child类继承了Parent类。Child类继承了Parent类的greet()方法,并且可以有它自己的goschool()方法。当我们创建Child类的实例并调用它的方法时,它能够调用自己的方法以及从Parent类继承的方法。

3)多态性

将父类对象应用于字类的特征就是多态。子类继承了父类特征的同时,也具备了自己的特征,并且实现不同的效果,这就是多态话的结构。像上面继承性的例子中,Child 类就有自己的行为特征:goshcool。

再举个简单例子:

class Animal:

    def speak(self):

        raise NotImplementedError("子类必须实现该方法")

class Dog(Animal):

    def speak(self):

        return "汪汪汪啊"

class Cat(Animal):

    def speak(self):

        return "喵喵喵啊"

def animal_speaks(animal):

    """接受所有Animal类的子类实例,并调用它们的speak方法"""

    print(animal.speak())

# 使用

dog = Dog()

cat = Cat()

animal_speaks(dog)  # 输出: 汪汪汪啊

animal_speaks(cat)  # 输出: 喵喵喵啊

输出的结果:

这个例子展示了如何在Python中使用多态性。Animal 类定义了一个必须由子类实现的 speak 方法。Dog 和 Cat 类继承了 Animal 类并实现了 speak 方法。animal_speaks 函数接受任何 Animal 类的子类实例,并调用它们的 speak 方法。这样,无论传递什么子类实例,animal_speaks 函数都能正确地调用 speak 方法。

今天先写学习到这里了,每天进步一点点。今天也要加油啊!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/143011.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

微服务配置中心介绍

在微服务架构中,配置中心是一个非常重要的组件,它负责管理所有服务的配置信息,使得配置管理变得更加集中和动态。配置中心能够极大地提高微服务架构的灵活性和可维护性。 为什么需要配置中心? 在传统的单体应用中,配置…

视觉Transformer(ViT) :全面超越CNN,看懂这篇文章就没什么能难倒你了!

【视觉Transformer】(Vision Transformer, ViT) 是一种革命性的技术,它将Transformer架构应用于视觉识别任务,通过自注意力机制来捕捉图像中的特征关系,显著增强了模型对视觉信息的解析力。这一领域的研究不仅打破了传统卷积神经网络&#xf…

KDD 2024论文分享┆STAMP:一种基于时空图神经网络的微服务工作负载预测方法

论文分享简介 本推文详细介绍了一篇最新论文成果《Integrating System State into Spatio Temporal Graph Neural Network for Microservice Workload Prediction》,论文的作者包括:上海交通大学先进网络实验室: 罗旸、高墨涵、余哲梦,高晓沨…

AI编程的特点及SCSAI平台在AI编程方面的一些思路

团长团 AI智造AI编程 2024年09月18日 18:25 北京 说先来看看AI编程的优缺点,然后我们再看看SCSAI在AI编程方面的一些可能选择 使用AI编程的优点 ‌AI编程的优点包括提升编程效率、降低编程门槛、优化程序结构、加强软件可靠性、促进跨领域融合,而缺点则…

supermap iclient3d for cesium中的平移,旋转

昨天写的模型机头不是速度的方向 基础知识 屏幕坐标系,笛卡尔空间直角坐标系,大地坐标系 平移和旋转都是基于笛卡尔空间直角坐标系,也就是基于地心。但是我们想实现模型的旋转是基于模型的局部坐标系,那么就要坐标转换。 向量归…

秒懂C++之特殊类设计

目录 设计一个类,不能被拷贝 设计一个类,只能在堆上创建对象 设计一个类,只能在栈上创建对象 设计一个类,无法被继承 设计一个类,只能创建一个对象(单例模式) 饿汉模式 懒汉模式 设计一个类,不能被拷…

从数据仓库到数据中台再到数据飞轮:我了解的数据技术进化史

这里写目录标题 前言数据仓库:数据整合的起点数据中台:数据共享的桥梁数据飞轮:业务与数据的双向驱动结语 前言 在当今这个数据驱动的时代,企业发展离不开对数据的深度挖掘和高效利用。从最初的数据仓库,到后来的数据…

字节跳动冯佳时:大语言模型在计算机视觉领域的应用、问题和我们的解法

演讲嘉宾|冯佳时 编辑 |蔡芳芳 近年来,大语言模型 (LLMs) 在文本理解与生成领域取得了显著进展。然而,LLMs 在理解和生成自然信号(例如图像,视频)等,还处在比较早期的探索阶段。为…

单例模式(饿汉式-懒汉式)

我给面试官讲解了单例模式后,他对我竖起了大拇指!https://blog.csdn.net/weixin_41949328/article/details/107296517?ops_request_misc%257B%2522request%255Fid%2522%253A%2522FAEE9ABD-432D-416C-98C6-9DD939138DEB%2522%252C%2522scm%2522%253A%252…

HTML中的文字/分区标记/特殊符号

1.font标记&#xff1a;用来设置文字的字体&#xff0c;大小&#xff0c;颜色&#xff0c;等属性 <!--font:font标记用来设置字体大小颜色属性size:设置字号&#xff0c;默认是3号&#xff0c;1表示4号&#xff0c;-1表示2号&#xff0c;取值范围是[1,7]或[-7,-1]color:设置…

【Manim】用manim描述二次曲面——上

二次曲面是可以化为一般形式的任意方程的图形 这里面A,...,J是常数。我们不可能把它们都列出来&#xff0c;但是有一些标准方程所以这里是一些更常见的二次曲面的列表。 1. 椭球体 这是椭球体的一般方程。。 这是一个典型椭球体的草图。 接下来我们用Manim实现该椭球体的绘制…

【CanMV K230 AI视觉】 人脸识别

【CanMV K230 AI视觉】 人脸识别 人脸识别 动态测试效果可以去下面网站自己看。&#xff09; B站视频链接&#xff1a;已做成合集 抖音链接&#xff1a;已做成合集 人脸识别 前面学习过的人脸检测&#xff0c;只检测出人脸&#xff0c;而本实验要做的人脸识别&#xff0c;会学…

嵌入式人工智能项目及人工智能应用项目——大合集列表查阅

本文的项目合集列表可能更新不及时&#xff08;会及时更新&#xff09;&#xff0c;可查阅实时更新的链接如下。 嵌入式人工智能及人工智能应用项目合集实时更新链接如下&#xff1a; 阿齐嵌入式人工智能及人工智能应用项目合集 (kdocs.cn)https://www.kdocs.cn/l/cc97tuieys4…

Python urllib

Python urllib 库用于操作网页 URL&#xff0c;并对网页的内容进行抓取处理。 本文主要介绍 Python3 的 urllib。 urllib 包 包含以下几个模块&#xff1a; urllib.request - 打开和读取 URL。urllib.error - 包含 urllib.request 抛出的异常。urllib.parse - 解析 URL。url…

心觉:不能成事的根本原因

很多人一直都很努力&#xff0c;每天都很忙 每天都学习很多东西&#xff0c;学习各种道&#xff0c;各种方法论 但是许多年过去了依然一事无成 自己的目标没有达成&#xff0c;梦想没有实现 为什么呢 关键是没有开悟 那么什么是开悟呢 现在很多人都在讲开悟 貌似开悟很…

回收站永久删除的文件还能恢复吗?教你恢复技巧

在数字时代&#xff0c;电脑是我们工作、学习和娱乐的重要工具。然而&#xff0c;随着我们对电脑的频繁使用&#xff0c;误删文件的情况也时有发生。当我们在回收站中不小心永久删除了某个重要文件时&#xff0c;内心可能会充满焦虑和疑惑&#xff1a;这些文件还能恢复吗&#…

基于springboot+vue实现的智能垃圾分类系统 (源码+L文+ppt)4-063

摘 要 本论文主要完成不同用户的权限划分&#xff0c;不同用户具有不同权限的操作功能&#xff0c;系统包括用户、物业和管理员模块&#xff0c;主要功能有用户、物业、垃圾站点、垃圾投放、验收信息、积分商城、积分充值、通知物业等管理操作。 关键词&#xff1a;智能垃圾…

【LLM】中国在 GPT/LLM 大模型上是否已经实现了弯道超车?

还是谈一下现状吧。中国的大模型公司与美国的大模型公司其实在数量上可能中国更多一些吧。 美国的 OpenAI&#xff1a;No.1&#xff0c;毫无疑问&#xff01;Google&#xff1a;尽管落了&#xff0c;但是依然是全球第二的实力吧&#xff1f;Meta&#xff1a;开源全靠它家的Ll…

【代码随想录训练营第42期 Day60打卡 - 图论Part10 - Bellman_ford算法系列运用

目录 一、Bellman_ford算法的应用 二、题目与题解 题目一&#xff1a;卡码网 94. 城市间货物运输 I 题目链接 题解&#xff1a;队列优化Bellman-Ford算法&#xff08;SPFA&#xff09; 题目二&#xff1a;卡码网 95. 城市间货物运输 II 题目链接 题解&#xff1a; 队列优…

Untangle电脑上网行为管理软件有哪些?(一口气看完,第一款建议收藏!)

控制上网的软件通常被称为上网行为管理软件或上网行为监控软件。 这类软件主要用于管理网络用户的上网行为&#xff0c;帮助企业或组织提升网络使用效率和工作效率&#xff0c;同时最大限度地避免不当上网行为带来的潜在风险和损失。 以下是一些值得推荐的电脑上网行为管理软件…