Python从0到100(十六):面向对象编程入门

在这里插入图片描述

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能相关知识,成为学习学习和学业的先行者!
欢迎大家订阅专栏:零基础学Python:Python从0到100最新最全教程!

一、面向对象编程概述

1.1面向对象编程定义

🐒🐒🐒面向对象的编程,顾名思义就是面向你的男朋友or女朋友(俗称对象),去进行编程! 这时候有的小伙伴会问啦:那我没对象怎么面向对象编程呢~
答:这个时候你可以跳过面向对象编程,去学习面向单身狗编程

哈哈哈,开个玩笑,那什么是真正的面向对象编程呢?🙈🙈🙈
⏬ 定义⏬
在现实世界中存在各种不同形态的事物,这些事物之间存在着各种各样的联系。在程序中使用对象来映射现实中的事物,使用对象间的关系来描述事物之间的联系,这种思想就是面向对象。

1.2面向过程and面向对象

分别使用面向过程和面向对象来实现五子棋:
1.面向过程:
开始游戏➡️黑子先走➡️绘制画面➡️轮到白子➡️绘制画面➡️判断输赢➡️返回步骤2➡️输出最后结果⬇️⬇️⬇️
即:先分析解决问题的步骤➡️使用函数把这些步骤以此实现➡️用的时候需要逐个调用函数
2.面向对象:
黑白双方:这两方的行为一样➡️棋盘系统:负责绘制画面➡️规则系统:负责判断诸如犯规、输赢等⬇️⬇️⬇️
即:把解决问题的事物分为多个对象➡️➡️➡️对象具备解决问题过程中的行为
⚠️⚠️⚠️ 若加入悔棋功能,面向过程和面向对象,分别怎么实现呢?
⏪面向过程⏩:从输入到判断到显示的一系列步骤都需要改动🔝🔝🔝
⏪面向对象⏩:只需要改动棋盘对象就可以🔄🔄🔄

二、类和对象

2.1类和对象的关系

面向对象编程有两个非常重要的概念:类和对象。 对象是面向对象编程的核心
具有相似特征和行为的事物的集合统称为类。 对象是根据类创建的,一个类可以对应多个对象。
🔹可以把玩具模型看作一个类
🔸把每个玩具看作一个对象
在这里插入图片描述

2.2类的定义

⏬ 定义⏬
类是由3部分组成的:

  1. 🕐类的名称:类名。
  2. 🕧类的属性:一组数据,比如性别。
  3. 🕤类的方法:允许进行操作的方法,比如说话。

使用class关键字来声明一个类,基本格式如下:
⏪语法格式⏩

class 类名:
    类的属性
    类的方法

2.3根据类创建对象

1.根据类创建对象的语法格式如下:
⏪语法格式⏩

对象名 = 类名()

2.要想给对象添加属性,可以通过如下方式:
⏪语法格式⏩

对象名.新的属性名 =

三、构造方法

3.1构造方法

⏬ 定义⏬
构造方法指的是 __init__方法
当创建类的实例的时候,系统会自动调用构造方法,从而实现对类进行初始化的操作。

⏪语法格式⏩

class Car:
    def __init__(self):
        self.color = '黑色'
    def toot(self):
         print("%s的车在鸣笛..."%(self.color))

◀️ 调用⬇️方法 ▶️

  bmw = Car()
bmw.toot()

3.2析构方法

⏬ 定义⏬
当删除一个对象来释放类所占用资源的时候,Python解释器默认会调用另外一个方法,这个方法就是__del__( )方法。
__del__方法被称为析构方法。

四、self的使用

⏬ 定义⏬
方法的列表中,第1个参数永远都是self
♨️self的字面意思是自己,我们可以把它当做C++里面的this指针理解,表示的是对象自身
当某个对象调用方法的时候,Python解释器会把这个对象作为第1个参数传给self,开发者只需要传递后面的参数就可以了。

⏪语法格式⏩

class Dog:
    def __init__(self, newColor):
        self.color = newColor
    def printColor(self):
         print("颜色为:%s"%self.color)

◀️ 调用⬇️方法 ▶️

dog1 =  Dog("白色")
dog1.printColor()

五、封装

⏬ 定义⏬
封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。
♨️对于面向对象的封装来说,其实就是使用构造方法将内容封装到 对象 中,然后通过对象直接或者self间接获取被封装的内容。

⏪语法格式⏩

class Person: 
    def __init__(self, name, age): 
        self.name = name 
        self.age = age    
laowang = Person('徐', 30)
laowang.age = 300
print(laowang.age)
# 300

⚠️人的年龄可以随便设置,显然不可行⚠️

为了保护类里面的属性,可以采用如下方式解决:
📍把属性定义为私有属性,即在属性名的前面加上两个下划线
📍添加用于设置或获取属性值的两个方法供外界调用。

六、继承

⏬ 定义⏬
✅在现实生活中,继承一般指的是子女继承父辈的财产。
✅在程序中,继承描述的是事物之间的所属关系。

6.1单继承

类的继承是指在一个现有类的基础上构建一个新的类,构建出来的新类被称作子类。
在这里插入图片描述
⬅️波斯猫和巴厘猫都继承自猫,而沙皮狗和斑点狗都继承狗➡️

Python程序中,继承使用如下语法格式标注:
⏪语法格式⏩

class 子类名(父类名)

假设有一个类为A,A派生出来了子类B,示例如下:
⏪语法格式⏩

class B(A)class A(object)

⚠️默认是继承自object的⚠️

6.2 多继承

现实生活中,一个派生类往往会有多个基类。比如沙发床是沙发和床的功能的组合,这都是多重继承的体现。
⚓️Python支持多继承,多继承就是子类拥有多个父类,并且具有它们共同的特征,即子类继承了父类的方法和属性。⚓️
在这里插入图片描述
⬅️水鸟拥有了鱼和鸟的特征 ➡️

多继承可以看做是单继承的扩展,语法格式如下:
⏪语法格式⏩

class 子类名(父类1,父类2)

⬅️如果子类继承的多个父类间是平行的关系,子类先继承的哪个类就会调用哪个类的方法。➡️

七、多态

⏬ 定义⏬
多态的概念其实不难理解,它是指对不同类型的变量进行相同的操作,它会根据对象(或类)类型的不同而表现出不同的行为。

7.1Python中多态的作用

让具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容(功能)的函数。

7.2Python中多态的特点

🌕1、只关心对象的实例方法是否同名,不关心对象所属的类型;
🌖2、对象所属的类之间,继承关系可有可无;
🌗3、多态的好处可以增加代码的外部调用灵活度,让代码更加通用,兼容性比较强;
🌘4、多态是调用方法的技巧,不会影响到类的内部设计。

⏪语法格式⏩
⌛️A类:

class A(object):       
    def test(self):
        print("--A--test")

⏳B类:

class B(A):           
    def test(self):  
        print("--B--test")

📈代码展示 📉

class A(object):
    def test(self):
        print("--A--test")
class B(A):
    def test(self):
        print("--B--test")
def func(temp):
    temp.test()
a = A()                
b = B()
func(a)
func(b)
# --A--test
# --B--test

八、类属性和实例属性

8.1类属性

类属性是类所拥有的属性,它需要在类中进行显示地定义(位于类内部,方法的外面),它被所有类的实例对象所共有,在内存中只存在一个副本。

⏪语法格式⏩

class Cat(object):
    #类属性
    num = 0

8.2实例属性

⏰通过“实例.属性”添加属性的属性都是实例属性。
⏪语法格式⏩

def __init__(self):
    #实例属性
    self.age = 1

九、类方法和静态方法

9.1类方法

📧使用修饰器 @classmethod来标识类方法📧
⏪语法格式⏩

class 类名:
    @classmethod
    def 类方法名(cls):
        方法体

🎯要想调用类方法,既可以通过对象名调用类方法,又可以通过类名调用类方法,这两种方法没有任何区别。

9.2静态方法

📧使用修饰器 @staticmethod来标识静态方法📧

class 类名:
    @staticmethod
    def 静态方法名():
        方法体

✳️静态方法是没有self参数,在静态方法中无法访问实例变量
💟静态方法中不可以直接访问类属性,但是可以通过类名引用类属性
✴️静态方法跟定义它的类没有直接关系,只是起到了类似函数的作用。

十、面向对象应用

1.定义一个类描述数字时钟。

import time


# 定义数字时钟类
class Clock(object):
    """数字时钟"""

    def __init__(self, hour=0, minute=0, second=0):
        """初始化方法
        :param hour: 时
        :param minute: 分
        :param second: 秒
        """
        self.hour = hour
        self.min = minute
        self.sec = second

    def run(self):
        """走字"""
        self.sec += 1
        if self.sec == 60:
            self.sec = 0
            self.min += 1
            if self.min == 60:
                self.min = 0
                self.hour += 1
                if self.hour == 24:
                    self.hour = 0

    def show(self):
        """显示时间"""
        return f'{self.hour:0>2d}:{self.min:0>2d}:{self.sec:0>2d}'


# 创建时钟对象
clock = Clock(23, 59, 58)
while True:
    # 给时钟对象发消息读取时间
    print(clock.show())
    # 休眠1秒钟
    time.sleep(1)
    # 给时钟对象发消息使其走字
    clock.run()

2.定义一个类描述平面上的点,要求提供计算到另一个点距离的方法。

class Point(object):
    """屏面上的点"""

    def __init__(self, x=0, y=0):
        """初始化方法
        :param x: 横坐标
        :param y: 纵坐标
        """
        self.x, self.y = x, y

    def distance_to(self, other):
        """计算与另一个点的距离
        :param other: 另一个点
        """
        dx = self.x - other.x
        dy = self.y - other.y
        return (dx * dx + dy * dy) ** 0.5

    def __str__(self):
        return f'({self.x}, {self.y})'


p1 = Point(3, 5)
p2 = Point(6, 9)
print(p1, p2)
print(p1.distance_to(p2))

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM的教务管理系统

功能模块 登录界面 管理员端 教师端 学生端 部分源码 //登录表单处理RequestMapping(value "/login", method {RequestMethod.POST})public String login(Userlogin userlogin) throws Exception {//Shiro实现登录UsernamePasswordToken token new UsernamePasswo…

F-47创建预付款请求

F-47创建预付款请求 需要删除 可以使用FB08 冲消即可

【SMART目标法】项目管理必会的思维分析工具 06

SMART分析方法,是让管理者的工作变被动为主动的一个很好的手段。实施目标管理不但是有利于员工更加明确高效地工作,更是为未来的绩效考核制定了目标和考核标准,使考核更加科学化、规范化,更能保证考核的公开、公平与公正。 “sma…

Java调用ffmpeg把rtsp视频流保存为MP4文件,并播放

前言:最近项目需要把rtsp的视频流截取保存为MP4文件。经过多方调研,最终找到方案:调用ffmpeg命令行完成转码。ffmpeg命令行确实稳定靠谱!ok,下面就开始分享代码。 1、环境工具准备 ffmpeg的程序和一个稳定的rtsp流 这是我的ffmpeg的版本。 我这里rtsp流用的海康硬盘录里…

制造业工厂数字化转型的具体方法

制造业工厂数字化转型是指将传统的制造业生产过程和管理方式应用数字技术进行改造和升级,以提高生产效率、降低成本、优化产品质量和提升企业竞争力。 制造业数字化转型基本概念: 1. 数字化生产:将传统工艺流程数字化,通过自动化设…

【Linux】:epoll

高级IO 一.各种接口二.工作模式 按照man手册的说法: 是为处理大批量句柄而作了改进的poll. 一.各种接口 快速认识接口: events可以是以下几个宏的集合: EPOLLIN : 表示对应的文件描述符可以读 (包括对端SOCKET正常关闭); EPOLLOUT : 表示对应的文件描…

智慧灯杆综合管理平台建设思路及系统方案设计

一、建设思路 智慧灯杆综合管理平台的建设旨在实现城市基础设施的智能化、信息化和高效化。在构建这一平台时,我们首先要明确其核心理念:以灯杆为载体,整合各类城市服务资源,通过先进的物联网技术和大数据分析,为城市…

欧美助听器市场热门品牌盘点,国产爱可声备受青睐

近年来,随着中国技术的不断进步和品质的提升,国产助听器品牌爱可声在欧美市场备受瞩目。在欧美国家助听器市场,有许多热门品牌分别为:峰力、斯达克、瑞声达、爱可声等。这些品牌凭借其悠久的历史、先进的技术和高品质的产品&#…

Python3:强大的编程语言及其广泛应用

点击下载《Python3:强大的编程语言及其广泛应用》 1. 前言 Python3作为一种强大的编程语言,凭借其简洁易读、功能丰富以及强大的扩展性,已经成为编程界的热门选择。本文将详细介绍Python3的主要特性、应用领域以及它在实际项目中的优势&…

胖东来的商业启示!2024创业赛道!2024创业新项目新商机!2024创业风口!2024普通人的创业机会!2024创业赚钱项目!

在中国零售业,胖东来是“神”一般的存在,不讲业绩,只讲幸福,却造就了全国最具人效和坪效的零售门店,都说胖东来成功的核心秘诀是“把人当人”。 当然胖东来的成功可不是偶然,它背后是于东来多年来的坚持与努…

提高在线考试成绩的备考技巧与建议

参加在线考试已经成为现代学习的一部分,它的便利性和灵活性为学生提供了更多的学习机会。然而,为了在在线考试系统中取得好成绩,备考技巧是非常重要的。 设置明确的学习目标 在备考在线考试之前,为自己设定明确的学习目标是非常重…

通义灵码-IDEA的使用教程

通义灵码-IDEA的使用教程 1、通义灵码是什么? 通义灵码,是阿里云出品的一款基于通义大模型的智能编码辅助工具,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研发智能问答、异常报错排查等能力&#…

【svgwrite 库简介,附代码】如何将 .ttf 字体文件转化为 .svg 矢量图形?

当涉及到字体和矢量图形时,.ttf 和 .svg 是两种不同的文件格式: .ttf (TrueType Font): .ttf 文件是一种常见的字体文件格式,用于存储 TrueType 字体。TrueType 是一种字体轮廓的标准,它使用贝塞尔曲线描述字形&…

linux中git的使用

为什么要有git git相当于一个仓库可以让我们更好的去管理我们的代码,实现版本的控制,上传到云端仓库。有了git,就可以实现多人同时开发一个项目(每个负责一部分代码,最后都上传到同一个仓库)。 git github/gitee 的区…

羊大师分享,羊奶夏日里的养生佳品

羊大师分享,羊奶夏日里的养生佳品 羊奶,作为夏日里的养生佳品,确实拥有诸多益处。在炎炎夏日,人体面临着高温、湿度的双重考验,身体容易出现各种不适,而羊奶正好可以为我们提供多方面的滋养与保护。 羊奶…

UTONMOS:用区块链技术拓展商业边界在哪里?

引言 大约从 2021 年Web 3 这个新概念开始受到风险基金和科技圈的普遍关注。但如果你对过去几年区块链的发展历史足够了解,就应该已经意识到现在的 Web 3 并不是什么新技术,甚至不是旧技术的进步,它只是一个基于区块链技术的宏大构想。 我是…

光伏储能控制系统的功能策略

一、控制策略 1、功率控制策略 光伏阵列的输出功率受光照和温度影响,最大功率点是转换太阳能为电能的最高效点。MPPT控制器根据实时参数调整光伏阵列工作点,确保其始终处于最大功率输出状态,提高能量转换效率,增加发电量&#x…

产品经理好干吗?

赚钱的工作都不轻松吧,除非是家里资源好的。 产品经理的薪资还是可观的 ,小白如何成为产品经理? 首先要有经验,有理论知识,对想从事产品经理相关岗位的人来说,这基本是个必考的证书了,感兴趣的…

【每天一个linux小知识】nslookup

往期文章 tailf 和 tail -f 目录 往期文章什么是 nslookup示例参考 什么是 nslookup nslookup全称 name server lookup nslookup 是一款常用的网络工具,用于查询 DNS 的记录。通过 nslookup,用户可以查找特定主机的 IP 地址、查询域名的 MX 记录&…

Seatunnel-web build:prod 报错 jsx问题

问题1 JSX element implicitly has type any because no interface JSX.IntrinsicElements exists. 问题剖析 在使用typescript的时候,在vue或react、node中报以上错误,是JSX 元素隐式具有类型 "any",因为不存在全局类型 "J…