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

面向对象编程——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.hqwc.cn/news/521829.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

酷家乐显示被隐藏的模型的方法

在酷家乐中打开设计方案。 点击下面的眼睛图标。 在下拉菜单上方点击显示已隐藏模型。 此时可以看到方案中隐藏的模型都可以正常显示了。推荐:https://www.sx1c.com/37564.html 以上就是“酷家乐显示被隐藏的模型的方法”了,酷家乐的使用比较简单&am…

无处不在的便捷:D咖无人售卖咖啡机在公共场所的应用探索

在繁忙的现代生活中,无人售卖咖啡机作为一项便捷的服务,正逐渐在公共场所得到广泛应用。本文将探讨D咖无人售卖咖啡机在公共场所的应用场景和优势。 一、无人售卖咖啡机的应用场景 写字楼:写字楼内工作人员需要在繁忙的工作中寻找便捷的饮品解…

今日arXiv最热大模型论文:北大发布,通过上下文提示,让大模型学习一门新的语言

在人工智能领域,大语言模型(LLMs)的发展已经取得了显著的进步,它们在处理高资源语言方面表现出色。然而,对于资源较少的语言,尤其是极低资源语言,这些模型的支持却显得力不从心。这些语言往往缺…

基于Leatlet标注Geojson下载器实现

在上一篇文章中,我们学习了Leaflet的基础知识,包括如何创建地图、添加图层等。在本文中,我们将深入学习Leaflet中标注的创建和管理,包括如何添加标注、自定义标注图标、创建图层组、批量添加和删除标注、为标注添加属性和弹出框等…

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

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

【GAMES101】Lecture03 Transformation 变换

目录 0 课程内容1 Why Study Transformation1.1 Modeling 模型变换1.2 Viewing 视图变换 2 2D Transformations 二维变换2.1 Scale 缩放变换2.2 Reflection Matrix 反射矩阵2.3 Shear Matrix 切变矩阵2.4 Rotate 旋转2.5 特点:线性变换可以用矩阵表示(Li…

《数字图像处理(MATLAB版)》相关算法代码及其分析(2)

目录 1 将8连通边界转换为4连通边界 1.1 移除对角线转折 1.2 插入额外像素 2 将边界信息转换为二进制图像 2.1 函数定义 2.2 参数处理和验证 2.3 默认大小参数设置 2.4 根据参数调整边界位置 2.5 生成二进制图像 2.6 错误处理 3 对二值图像边界的跟踪和提取 3.1 函…

网络仿真(二)

时延和丢包率 网络中的节点之间时延(延迟)和丢包率是衡量网络性能的两个关键指标。 时延(延迟):时延是指数据在网络中从一个节点传输到另一个节点所需的时间。这包括处理时延(数据在节点处理的时间&#x…

【CSP试题回顾】202109-1-数组推导

CSP-202109-1-数组推导 解题代码 #include<iostream> #include<vector> #include<algorithm> using namespace std;long long maxSum, minSum;int main() { int n;cin >> n;vector<int>B(n);for (auto& it : B){cin >> it;maxSum …

李想已经5天没发微博了

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

Vue的HTML插入——v-html指令

有时我们希望将数据作为HTML代码插入到HTML模板中&#xff0c;而不是以纯文本的形式显示。在这种情况下&#xff0c;我们需要使用Vue.js的v-html指令&#xff1a; <template><div><p>纯文本: {{ rawText }}</p><p>属性: <span v-html"r…

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

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