【python进阶篇】面向对象编程(1)

news2024/12/24 10:54:46

面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。

在Python中,所有数据类型都可以视为对象,当然也可以自定义对象。自定义的对象数据类型就是面向对象中的类(Class)的概念。

一.对象(Object)

一个对象具有两个特征:

  • 属性

  • 方法

我们可以举个例子,比如人:

  • 属性:肤色、体重、发型等

  • 方法:打游戏、跑步、游泳等

总之一句话总结就是:属性=对象有什么,方法=对象会什么。

关于对象的代码实例,接下来在介绍类的时候一并说明。

二.类(class)

1.创建类和对象

语法:

class 类名:
    属性
    方法

说明:
类是抽象的模板,在Python中,定义类是通过class关键字

实例:

class person:
    name = "小红"       ##name属性
    age = 20             ##age属性
    def sport(self):                 ###sport方法
        print('运动真开心')


w = person()   ###创建类的对象

这边我们创建了一个类,并给这个类添加了属性及方法,然后我们还创建了一个类的对象并赋给了变量W,接下来我们来试下调用我们的属性及方法。

执行对象的方法:

w.sport()

输出:

执行对象的属性:

w.name

输出:

2.self是什么?

(1)self即代表着实例(对象)本身

(2)名字不一定必须叫self,可以叫she或者he,但是按照约定我们还是使用self

3.类的初始化:

我们可以在创建实例的时候,把一些我们认为必须绑定的属性强制填写进去。通过定义一个特殊的__init__(两个下划线)方法来实现, 这个方法不需要被调用,只要创建对象就会自动执行。

实例:

class person:
    def __init__(self):
        self.name = "小红"       ##name属性
        self.age = 20             ##age属性
        print('程序开始执行啦')
        
    def sport(self):                 ###sport方法
        print('运动真开心')


w = person()   ###创建类的对象

输出:

三.类的三大特性

三大特性:封装、继承、多态

1.封装

在Python中使用OOP,我们可以限制对方法和变量的访问。这样可以防止数据直接修改(称为封装),在Python中,我们使用下划线作为前缀来表示私有属性,即单“ _”或双“ __

class person:
    def __init__(self):

        self.__age = 20   

    def change(self):
        print(self.__age)


w = person()
w.change()

w.__age

输出:

这边显示已经无法从外部访问,这样就确保了外部代码不能随意修改对象内部的状态。

2.继承

继承是一种创建新类的方法,用于在不修改现有类的细节的情况下使用它。

我们直接通过实例来了解下:
 

class A:  ##父类
    def __init__(self):
        print("自动执行")
    def a(self):
        print("执行程序A")
        
        
        
class B(A):    ##子类
    def b(self):
        print('执行程序B')
        

B_A = B()
B_A.a()   ##调用父类的方法
B_A.b()   ##调用子类的方法

输出:

通过上面的实例,我们可以看出,子类继承了父类的功能,调用子类的属性及方法。

3.多态性

多态性是一种功能(在OOP中),可以将公共接口用于多种形式(数据类型)。

直接看实例:
 

class A:
    def a(self):
        print("执行程序A")
        
        
        
class B:
    def a(self):
        print('执行程序B')
        
class C:
    def a(self):
        print('执行程序C')
        
        
        

def select(aa):
    aa.a()


    
    
select(A())
select(B()) 
select(C())   

输出:

在上面的程序,我这边定义了A、B、C三个类,它们每个都有通用的a()方法,但是,它们的功能不同,为了允许多态,我们创建了通用接口,即select()可以接受任何对象的函数,然后传递对象即可运行。

四.总结

面向对象编程让编程变得简单而有效,让编程人员的生产力提高。喜欢的朋友后续可以再来看看其他的进阶内容,谢谢。

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

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

相关文章

百度智能云发布专用向量数据库 VDB 1.0,全新设计内核开启性能狂飙

1 专用向量数据库应对未来业务挑战 向量数据库 向量检索 数据库 向量数据库大致可以分为 2 部分:向量数据的检索,以及向量数据的存储和管理。 向量数据库的性能,比如高 QPS、低延时等,使得业务能够更快的响应用户的查询请求…

【教程】 iOS构建版本无效问题解决方案

引言 在进行iOS应用上架时,有时会遇到构建版本无效的问题,即通过XCode上传成功后,但在App Store Connect的TestFlight中无法显示构建版本,或者显示一会儿后就消失了。本文将介绍可能的原因分析,并提供解决问题的方法。…

Linux中三次握手,四次挥手状态图,端口复用 半关闭状态,心跳包

tcp三次握手和四次挥手状态图: 为什么需要2MSL: 原因1:让四次挥手过程更加可靠,确保最后一个发送给对方的ACK到达;若对方没有收到ACK应答,对方会再次发送FIN请求关闭,此时在2MSL时间内被动关闭…

【uni-app】condition 启动模式配置,生产环境无效,仅开发期间生效

在小程序开发过程中,每次代码修改后,都会启动到首页,有时非常不方便,为了更高效的开发,有时需要模拟直接跳转到指定的页面, 操作方法如下: 在pages.joson里面配置下列代码: "…

C#,煎饼排序问题(Pancake Sorting Problem)算法与源代码

1 煎饼排序问题 给定一个未排序的数组,任务是对给定数组进行排序。您只能在阵列上执行以下操作。 翻转(arr,i):将数组从0反转为i 示例: 输入:arr[]{23、10、20、11、12、6、7} 输出&#xff1a…

Prompt Engineering、Finetune、RAG:OpenAI LLM 应用最佳实践

一、背景 本文介绍了 2023 年 11 月 OpenAI DevDay 中的一个演讲,演讲者为 John Allard 和 Colin Jarvis。演讲中,作者对 LLM 应用落地过程中遇到的问题和相关改进方案进行了总结。虽然其中用到的都是已知的技术,但是进行了很好的总结和串联…

Vue+SpringBoot打造天沐瑜伽馆管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 瑜伽课程模块2.3 课程预约模块2.4 系统公告模块2.5 课程评价模块2.6 瑜伽器械模块 三、系统设计3.1 实体类设计3.1.1 瑜伽课程3.1.2 瑜伽课程预约3.1.3 系统公告3.1.4 瑜伽课程评价 3.2 数据库设计3.2.…

从零开始学习Diffusion Models: Sharon Zhou

How Diffusion Models Work 本文是 https://www.deeplearning.ai/short-courses/how-diffusion-models-work/ 这门课程的学习笔记。 文章目录 How Diffusion Models WorkWhat you’ll learn in this course [1] Intuition[2] SamplingSetting Things UpSamplingDemonstrate i…

SpringBoot第三课-日志

1.日志分类 2.默认使用 默认使用logback与slf4j作为底层默认日志 但是由于日志是系统启动就需要使用,所以与其他的自动配置不同,自动配置是后来使用的,而日志是使用监听器配置好的。 ApplicationListener 3.日志级别 1.级别介绍 SpringB…

【MySQL 系列】在 Windows 上安装 MySQL

在 Windows 平台上安装 MySQL 很简单,并不需要太复杂的步骤。按照本文的步骤操练起来就可以了。 文章目录 1、下载 MySQL 安装程序2、安装 MySQL 数据库2.1、选择安装类型2.2、检查所需组件2.3、安装所选产品组件2.4、产品配置2.5、配置高可用性2.6、配置服务器类型…

正则表达式-分组

1、oracle-正则表达式:将09/29/2008 用正则表达式转换成2008-09-29 select regexp_replace(09/29/2008, ^([0-9]{2})/([0-9]{2})/([0-9]{4})$, \3-\1-\2) replace from dual; 解析:regexp_replace-替换, 第一个参数:需要进行处…

分享7款前端直接使用的项目动画特效(附在线演示)

分享7款非常不错的项目动画特效 其中有jQuery特效、canvas特效、CSS动画等等 下方效果图可能不是特别的生动 那么你可以点击在线预览进行查看相应的动画特效 同时也是可以下载该资源的 图片分割组合特效 首先会把图片分割成均匀的小块 之后又会将这些小块拼接组合起来 以下效…

节日专访|「我」是「我」

又到了 Zilliz 一年一度的特别时刻——三八妇女节专访。按照惯例,我们每年都会选定一个话题进行讨论,今年的主题是「我是我」。 我是我, 是生物学上以性别划分的女性, 是在不同职业领域中绽放光彩的工程师、财务、市场运营…… 是…

数据结构从入门到精通——栈

栈 前言一、栈1.1栈的概念及结构1.2栈的实现1.3栈的面试题 二、栈的具体实现代码栈的初始化栈的销毁入栈出栈返回栈顶元素返回栈中的元素个数检测是否为空Stack.hStack.ctest.c 前言 栈,作为一种后进先出(LIFO)的数据结构,在计算…

力扣大厂热门面试算法题 6-8

6. Z 字形变换,7. 整数反转,8. 字符串转换整数 (atoi),每题做详细思路梳理,配套Python&Java双语代码, 2024.03.08 可通过leetcode所有测试用例。 目录 6. Z 字形变换 解题思路 边界条件 完整代码 Python Ja…

李想已经5天没发微博了

李想的微博已经5天没更新了。 理想MEGA发布之后的第二天,李想在微博转发了一条某汽车自媒体和理想MEGA设计师BenBaum的访谈视频,并配文表示,Ben的访谈非常好。 不过,在之后的5天时间里,李想的微博便悄无声息了。这与“…

yocto本地离线构建时报错

解决方案:在local.conf中添加 BB_NO_NETWORK "1"禁用网络,从本地downloads中fetch源码

【方法】如何打开7Z分卷压缩文件?

什么是7Z分卷压缩文件?就是在压缩文件时,将文件压缩成若干个大小一样、以“文件名.7z.序号”格式命名的7Z压缩包,可以方便存储和传输,如下图所示。 一、7Z分卷压缩文件如何打开? 我们只需要按照普通压缩包的打开方式&…

智慧园区综合运营数字化解决方案

1. 楼栋管理 2. 物业管理 3. 安防管理 4. 门禁管理 5. 停车管理 6. 能源管理 7. 环保管理 8. 园区生活服务 9. 招商管理 10. 收费中心 11. 园区地图 12. 门户网站 智慧园区软件方案:智慧园区软件解决方案,园区运营管理系统(源码)-…

DiT:Scalable Diffusion Models with Transformers

TOC 1 前言2 方法和代码 1 前言 该论文发表之前,市面上几乎都是用卷积网络作为实际意义上的(de-facto)backbone。于是一个想法就来了:为啥不用transformer作为backbone呢? 文章说本论文的意义就在于揭示模型选择对于…