python面向对象学习_Python 初识面向对象#学习猿地

> 面向对象编程——Object Oriented Programming,简称`OOP`,是一种**以对象为中心**的程序设计思想。

>

> 面向过程编程——Procedure Oriented Programming,简称`POP`,是一种**以过程为中心**的程序设计思想。

## 理解面向过程与面向对象思想

大家先思考一个问题:把大象装进冰箱,需要几步?

小品给出的答案:三步

第一步:打开冰箱门

第二步:把大象装进去

第三步:关上冰箱门

##### 用面向过程去理解

> 上面给出的答案就是面向过程的,遇到问题后,分析解决问题的步骤,然后一步步去实现

##### 用面向对象去理解

> 是通过分析问题中需要的抽象模型,然后更具需要的功能分别去创建模型对象,最终由模型对象来完成程序

首先面向对象要解决这个问题,需要先建立出抽象模型,比如:打开冰箱门和关闭冰箱门,这都属于一个冰箱的功能,大象走进去,这就是大象的功能。到此时我们就出现了两个抽象模型,一个是冰箱,一个是大象。

冰箱具有 打开和关闭的功能,大象具有走路的能力。

分析到这里,就是面向对象的思想,具体完成的话,就是去创建冰箱和大象这两个对象,最终完成这个程序

冰箱对象-开门,大象对象-走进冰箱,冰箱对象-关门

再思考一个问题,想吃清蒸鱼怎么办?

面向过程:

1. 买鱼,买料

2. 杀鱼和清理,并且腌制

3. 放锅烧水

4. 把鱼放进去,开始蒸

5. 十分钟后开盖,把鱼端出来,浇汁

面向过程中想完成这个愿望,需要一步一步的去执行。

面向对象:

需要一个对象:大厨

告诉大厨,我想吃清蒸鱼

面向对象就是调用对象去解决问题,具体的对象如何去解决呢?

大厨这个对象肯定也是一步步完成。但是对于我来说,就是调用了对象。而对象去完成这个过程。

当然了最终面向对象中是有面向过程的体现的。

### 面向过程和面向对象的区别和优缺点?

#### 一,面向过程

>  面向过程的核心是过程,过程就是指解决问题的步骤。

优缺点:

+ 优点: 将负责的问题流程化,进而实现简答化

+ 缺点:扩展性差(更新,维护,迭代)

总结:在去完成一些简单的程序时,可以使用面向过程去解决。但是如果有复杂的程序或任务,而且需要不断的进行迭代和维护,那么肯定是优先选择面向对象的编程思想

#### 二,面向对象

> 面向对象的核心是对象,是一个特征和功能的综合体

优缺点:

+ 优点:可扩展性高

+ 缺点:编程复杂度相对面向过程高一些。指的是计算机在执行面向对象的程序时的性能表现

### 后面如何去学习面向对象编程?

1. 理解面向对象编程的思想

2. 学习面向对象编程的语法

### 认识类与对象

类:类是对象的一个抽象的概念

对象(实例):对象就是由类的创建的实例

类和对象的关系就是 模具与铸件的关系

1. 类是由对象总结而来的,总结的这个过程叫做抽象

2. 对象是由类具体实施出来的,这个过程叫做实例化

如果你现在有点迷糊,那你想一想,

+ 水果是一个对象还是一个类?

+ 汽车是一个对象还是一个类?

+ 手机是一个对象还是一个类?

再来想一个问题,我现在给大家上课,用的是一个笔记本电脑,

请问我当前正在使用的这个笔记本电脑是一个对象还是一个类?

笔记本电脑特征:金属外壳,优美的外观

笔记本电脑功能:给大家制作课程,编辑代码,听音乐。。。

## 面向对象编程的基本实现

> 如果需要实例一个对象,那么需要先抽象一个类

例如需要创建一个汽车对象

首先需要抽象一个汽车类:汽车类就相当于一个设计图纸一样。

由这个设计图纸去创建(实例)出来的真实汽车就是一个对象

如何创建一个类,通过class关键字来定义一个类

示例:

```python

# 定义一个汽车的类

class Cart():

pass

'''

类名的书写规范,建议使用驼峰命名法

大驼峰:MyCar XiaoMi

小驼峰:myCar xiaoMi

'''

```

类中需要声明什么内容?

```

一个类有特征和功能两个内容组成:

特征就是一个描述:颜色:白色,品牌:奥迪,排量:2.4 。。。

功能就是一个能力:拉货,带美女兜风。。。。

特征在编程中就是一个变量,在类中称为 属性

功能在编程中就是一个函数,在类中称为 方法

类中属性一般定义在前面,方法定义在后面

```

示例:

```python

# 定义一个汽车的类

class Cart():

# 属性 ==> 特征 ==> 变量

color = '白色'  # 表示颜色属性

brand = '奥迪'  # 表示品牌属性

pailiang = 2.4 # 表示排列属性

# 方法 ==> 功能 ==> 函数

def luohuo(self):

print('小汽车能拉货')

def doufeng(self):

print('小汽车能兜风')

def bamei(self):

print('带妹子去嗨。。。')

```

如何通过类实例化对象并使用?

```python

# 如何去使用这个类?

# 通过类实例化一个对象

aodiobj =  Cart()

# print(aodiobj,type(aodiobj))

# <__main__.cart object at>

# 调用对象的方法

aodiobj.bamei()

# 获取对象的属性

print(aodiobj.brand)

```

---

### 成员属性和成员方法的操作

#### 对象操作成员

```

成员属性:

访问:  对象.成员属性名

修改:  对象.成员属性名法 = 新值。(此时等于给这个对象创建了一个自己的属性)

添加:  对象.新成员属性 = 值 (此时是给这个对象自己新建了一个属性)

删除:  del 对象.成员属性 (注意:只能删除这个对象自己的属性)

成员方法:

访问:  对象.成员方法名()

修改:  对象.成员方法名 = func(此时等于给这个对象创建了一个自己的方法)

添加:  对象.方法名 = func (此时是给这个对象自己新建了一个方法)

删除:  del 对象.方法名 (注意:只能删除这个对象自己的方法)

```

#### 类操作成员(不推荐)

```

成员属性:

访问:  类名.成员属性名

修改:  类名.成员属性名法 = 新值。(此时通过这个类创建的对象都具有这个属性)

添加:  类名.新成员属性 = 值 (此时通过这个类创建的对象都具有这个属性)

删除:  del 类名.成员属性 (注意:删除这个类的属性后,这个类创建的对象也没有这几个属性了)

成员方法:

访问:  类名.成员方法名()

修改:  类名.成员方法名 = func(此时通过类创建的对象都被修改)

添加:  类名.方法名 = func (此时通过类创建的对象都被修改)

删除:  del 类名.方法名 (注意:此时通过类创建的对象都被修改)

```

#### 总结

+ 一个类可以实例化出多个对象,每个对象在内存中都独立存在的

+ 当通过类实例化对象时,并不会把类中的成员复制一份给对象,而去给对象了一个引用

+ 访问对象成员的时候,如果对象自己没有这个成员,对象会向实例化它的类去查找

+ 对象成员的添加和修改,都只会影响当前对象自己,不会影响类和其它对象

+ 删除对象的成员时,必须是该对象自己具备的成员才可以,不能删除类中引用的成员

+ 对类的成员操作,会影响通过这个类创建的对象,包括之前创建的。

----

#### `__del__`析构方法

```

__del__ 析构方法

触发机制:析构方法会在对象被销毁时自动触发

作用:关闭一些开发的资源

注意:是对象被销毁时触发了析构方法,而不是析构方法销毁了对象

对象会在哪些情况下被销毁?

1。 当程序执行完毕,内存中所有的资源都会被销毁释放

2。 使用 del 删除时

3。 对象没有被引用时,会自动销毁

```

示例:

> 定义一个类,完成一个日志的记录

>    调用这个对象的时候,传递一个日志信息

>    这个对象会创建一个文件,开始写入,并在最后关闭这个文件

```python

import time

class writeLog():

# 成员属性

# 文件的路径

fileurl = './'

# 日志文件的名称

filename = '2019-09-19'

# 初识化  打开文件

def __init__(self):

#完成文件的打开

print('初始化方法触发类。完成文件的打开')

self.fileobj = open(self.fileurl+self.filename,'a+',encoding='utf-8')

# 写日志的方法

def log(self,s):

print(f'把日志:{s} 写入文件中')

# 析构方法

def __del__(self):

print('析构方法触发了,关闭打开的文件')

# 在对象被销毁时,关闭在初始化方法中打开的文件对象

self.fileobj.close()

```

掌握学习方法,不如会弯道超车!

学习猿地:成就自己的只需一套精品!

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

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

相关文章

python如何使用多态_在python 3中,如何将多态应用于类

介绍多态性是为不同的基础形式(例如&#xff0c;数据类型或类)利用同一接口的能力。这允许函数在不同时间使用不同类型的实体。对于Python中的面向对象编程&#xff0c;这意味着可以用与属于特定类的特定对象相同的方式来使用它&#xff0c;就好像它是属于不同类的不同对象一样…

python输出数字方阵_在python里输出数字方阵

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…

python tkinter 弹窗_tkinter主窗口和子窗口同时弹出该怎么办?

参考代码注释import osfrom tkinter import filedialogimport tkinter as tkfrom tkinter import Buttonclass ReName():def __init__(self):self.n 0def shouldIgnore(self, path: str) -> bool:忽略以下路径:1. 文件夹。2. macOS 隐藏文件a. 文件名以 . 开头&#xff0c;…

安装mysql8.019命令符_MySQL 8.0.19安装教程(windows 64位)

话不多说直接开干目录下载完成后解压解压完是这个样子配置初始化的my.ini文件的文件解压后的目录并没有的my.ini文件&#xff0c;没关系可以自行创建在安装根目录下添加的my.ini(新建文本文件&#xff0c;将文件类型改为的.ini)&#xff0c;写入基本配置&#xff1a;[mysqld]# …

python tcp服务器_python实现TCP服务器端与客户端的方法详解

本文实例讲述了python实现TCP服务器端与客户端的方法。分享给大家供大家参考。具体如下&#xff1a;TCP服务器程序(tsTserv.py)&#xff1a;from socket import *from time import ctimeHOST PORT 21567BUFSIZ 1024ADDR (HOST, PORT)tcpSerSock socket(AF_INET, SOCK_STRE…

入Java_初入Java的方法

Java的方法类似于其他语言如C中的函数&#xff0c;比如我们第一个Java程序 输出Hello,world&#xff01;中用到一个方法System.out.printfln()&#xff1b;这里的printfln()就是一个方法&#xff0c;System是系统类&#xff0c;out是对象。1.什么是方法&#xff1f;方法是语句…

java method_JAVA Method的解析

java.lang.reflect.MethodMethodpublic final class Method extends Executable数据的层级结构Paste_Image.pngMethod中的方法boolean [equals].将此方法与指定的对象进行比较T extends [Annotation]T [getAnnotation]如果存在注释&#xff0c;则返回指定类型的注释否则返回为n…

java中this_多学习才能多赚钱之:java中this什么用

java中this什么用1、this调用当前属性&#xff1a;其主要作用是当需要给类中的数据进行初始化时&#xff0c;可以通过this来进行赋值&#xff0c;而不用随便定义一个变量来进行赋值&#xff0c;更有利于代码的阅读与理解(推荐教程&#xff1a;java教程)class Book{//定义书的类…

java api 英文_教你查阅Java API 英文文档(JDK 11)

然后找到“Specifications”并点击 API Documentation比如我们在别人的源码里看到了方法[也叫函数]&#xff1a; Scanner input new Scanner(System.in);所以搜索一下右上角 Scanner&#xff0c;对比我们看到的源码里import&#xff0c;发现是java.util包里的&#xff0c;所以…

jedis使用_Redis --Java客户端 Jedis

Redis --Java客户端 Jedis 博客说明 文章所涉及的资料来自互联网整理和个人总结&#xff0c;意在于个人学习和经验汇总&#xff0c;如有什么地方侵权&#xff0c;请联系本人删除&#xff0c;谢谢&#xff01; 简介 Jedis: 一款java操作redis数据库的工具. 菜鸟教程文档地址 使用…

java jolt tuxedo_java使用jolt调用tuxedo服务

使用包jolt-1.0import bea.jolt.JoltSession;import bea.jolt.JoltSessionAttributes;import bea.jolt.SessionException;简单示例JoltSession jsession;JoltSessionAttributes sattr;JoltRemoteService joltRemoteService;JoltTransaction trans;String userName "A…

找出最具竞争力的子序列_力扣300——最长上升子序列

这道题主要涉及动态规划&#xff0c;优化时可以考虑贪心算法和二分查找。原题给定一个无序的整数数组&#xff0c;找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101]&#xff0c;它的长度是 4。说明:可能会有多种最…

java 跨站点脚本编制_AppScan跨站点脚本编制修复

查了下百度&#xff0c;跨站点脚本编制其实也就是在url后加入参数和js脚本实现一些坏坏的事情&#xff0c;至少appscan就是这么干的。那么主要的工作就是把恶意代码给过滤了&#xff0c;作为javaweb开发&#xff0c;明显第一步想到的是过滤器。网上很多都是将request对象 传入H…

python怎么安装本地的egg_python egg怎么安装

经常接触Python的同学可能会注意到&#xff0c;当需要安装第三方python包时&#xff0c;可能会用到easy_install命令。easy_install是由PEAK(Python Enterprise Application Kit)开发的setuptools包里带的一个命令&#xff0c;它用来安装egg包。egg包是目前最流行的python应用打…

java 动态字符串_Java动态编译执行一串字符串,类似于Javascript里的eval函数

Javascript里的eval函数能动态执行一串js脚本。那Java里怎么做到呢。有两种方法:一种是使用可以执行js脚本的Java类 ScriptEngineManagerpublic static void main(String args[]){ScriptEngineManager manager new ScriptEngineManager();ScriptEngine se manager.getEngineB…

jquery全局变量_jQuery源码一个小细节,却很好地体现了性能优化的思想,很优秀...

写在前面听闻大佬们在写一些框架或者库的时候&#xff0c;到处都隐藏了一些细节&#xff0c;所以阅读他们的源代码&#xff0c;无论从性能优化、还是JS API的学习、亦或是代码风格等方面给到我们很多启发。这两天我翻看了一下jQuery1.x的源代码&#xff0c;看到了这么一段&…

java connection 共享_java 使用HttpURLConnection发送数据简单实例

java 使用HttpURLConnection发送数据简单实例每个 HttpURLConnection 实例都可用于生成单个请求&#xff0c;但是其他实例可以透明地共享连接到 HTTP 服务器的基础网络。请求后在 HttpURLConnection 的 InputStream 或 OutputStream 上调用 close() 方法可以释放与此实例关联的…

mockito mock void方法_Spock如何模拟抽象类方法

我们平时写单元测试时经常会遇到调用抽象类或父类的方法&#xff0c;这些抽象方法可能是调用底层接口或数据库&#xff0c;需要mock掉&#xff0c;让抽象方法返回一个我们指定的值&#xff0c;以便测试当前代码逻辑的场景。下面讲下Spock如何结合power mock实现动态mock抽象方法…

new 实例化对象是啥意思_二. 初步认识JS中的类和对象

1 构造函数的定义在JS中, 没有类(class)的概念, 主要是通过构造函数来模拟的.语法function 构造函数名 () {// 函数体}使用function关键字表示定义一个构造函数构造函数名一般首字母大写示例function Person() {}通过以上方式就可以定义一个Person构造函数, 相当于定义好了一个…

java get 空指针_Java 中空指针处理方法

空指针异常(Null Pointer Exception)是我们平时最容易碰到的&#xff0c;也是最令人讨厌的异常。本文介绍如何避免出现空指针异常。首先我们看如下的示例&#xff1a;private Boolean isFinished(String status) {if (status.equalsIgnoreCase("Finish")) {return Bo…