当前位置: 首页 > news >正文

Python入门【LEGB规则、面向对象简介、面向过程和面向对象思想、面向对象是什么? 对象的进化 、类的定义、对象完整内存结构 】(十三)

👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白
📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发
📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦
🍂博主正在努力完成2023计划中:以梦为马,扬帆起航,2023追梦人

 🔥🔥🔥 python入门到实战专栏:从入门到实战
🔥🔥🔥 Python爬虫开发专栏:从入门到实战
🔥🔥🔥 Python办公自动化专栏:从入门到实战
🔥🔥🔥 Python数据分析专栏:从入门到实战
🔥🔥🔥 Python前后端开发专栏:从入门到实战  

目录

LEGB规则

面向对象简介

面向过程和面向对象思想

面向对象是什么? 

对象的进化 

 类的定义

对象完整内存结构 


LEGB规则

Python在查找“名称”时,是按照LEGB规则查找的:

  • Local 指的就是函数或者类的方法内部
  • Enclosed 指的是嵌套函数(一个函数包裹另一个函数,闭包)
  • Global 指的是模块中的全局变量
  • Built in 指的是Python为自己保留的特殊名称 

如果某个 name 映射在局部 local 命名空间中没有找到,接下来就会在闭包作用域 enclosed 进行搜索,如果闭包作用域也没有找到, Python就会到全局 global 命名空间中进行查找,最后会在内建 built-in 命名空间搜索 (如果一个名称在所有命名空间中都没有找 到,就会产生一个 NameError )

#测试LEGB
s = "global"
def outer():s = "outer"def inner():s = "inner"print(s)inner()
outer()

我们依次将几个 s 注释掉,观察控制台打印的内容,体会LEBG 的搜索顺序。

实时效果反馈

1. 如下代码,调用 outer() 函数,则会输出的是:

s = "xiaotong"
def outer():s = "outer"def inner():s = "inner"print(s)inner()
outer()

A inner

B outer

C global

D 会报错

面向对象简介

Python完全采用了面向对象的思想,是真正面向对象的编程语言, 完全支持面向对象的基本功能,例如:继承、多态、封装等。 Python中,一切皆对象。我们在前面学习的数据类型、函数等,都是对象。 

 面向对象(Object oriented Programming,OOP)编程的思想主要是针对大型软件设计而 来的。

面向对象编程使程序的扩展性更强、可读性更好,使编程可以像搭积木一样简单。

面向对象编程将数据和操作数据相关的方法封装到对象中,组织代码和数据的方式更加接近 人的思维,从而大大提高了编程的效率。

❤️Python支持面向过程、面向对象、函数式编程等多种编程范式。 

面向过程和面向对象思想

面向过程和面向对象的区别 

面向过程和面向对象都是对软件分析、设计和开发的一种思想,它指 导着人们以不同的方式去分析、设计和开发软件。C语言是一种典型的面向过程语言,Java是一种典型的面向对象语言。

面向过程是什么?

面向过程适合简单、不需要协作的事务,重点关注如何执行。面向过程时,我们首先思考“怎么按步骤实现?”。比如,如何开车?我们很容易就列出实现步骤:

 比如:把大象装冰箱分几步?

但是当我们思考比较复杂的设计任务时,比如“如何造车?”,就会发现列出1234这样的步骤,是不可能的。那是因为,造车太复杂, 需要很多协作才能完成。此时面向对象思想就应运而生了。 

面向对象是什么? 

面向对象(Oriented-Object)思想更契合人的思维模式。我们首先思考的是"怎么设计这个事物?”。比如思考造车,我们就会先思考“车 怎么设计?”,而不是“怎么按步骤造车的问题”。这就是思维方式的转变。

天然的,我们就会从“车由什么组成”开始思考: 

为了协作,我们找轮胎厂完成制造轮胎的步骤,发动机厂完成制造 发动机的步骤;这样,发现大家可以同时进行车的制造,最终进行 组装,大大提高了效率。

具体到轮胎厂的一个流水线操作,仍然是有步骤的,还是离不开执 行者、离不开面向过程!

面向对象可以帮助我们从宏观上把握、从整体上分析整个系 统。 但是,具体到实现部分的微观操作(就是一个个方法), 仍然需要面向过程的思路去处理。 

我们千万不要把面向过程和面向对象对立起来。他们是相辅相成的。面向对象离不开面向过程! 

面向对象和面向过程总结

1 都是解决问题的思维方式,都是代码组织的方式。

2 面向过程是一种“执行者思维",解决简单问题可以使用面向过程

3 面向对象是一种“设计者思维”,解决复杂、需要协作的问题可以使用面向对象 

面向对象离不开面向过程:

宏观上:通过面向对象进行整体设计

微观上:执行和处理数据,仍然是面向过程 

实时效果反馈

1. 如下关于python中,面向对象的说法,错误的是:

A python中,一切都是对象

B python中,不是所有的都是对象。比如:数字就不是对象。

C 面向过程是一种“执行者思维",解决简单问题可以使用面向过程

D 面向对象是一种“设计者思维”,解决复杂、需要协作的问题可以 使用面向对象 

对象的进化 

随着编程面临的问题越来越复杂,编程语言本身也在进化,从主要 处理简单数据开始,随着数据变多进化“数组”; 数据类型变复杂, 进化出了“结构体”; 处理数据的方式和逻辑变复杂,进化出了“对象”。

 1 、简单数据 像30,40,50.4等这些数字,可以看做是简单数据。最初的计算 机编程,都是像这样的数字。

2、 C语言中的数组 将同类型的数据放到一起。比如:整数数组 [20,30,40] ,浮点数数组 [10.2, 11.3, 12.4] ,字符串数组: [“aa”,”bb”,”cc”]

⚠️上面的[20,30,40]不是python中的列表,是C语言中的数组

3 、C语言中的结构体 将不同类型的数据放到一起,是C语言中的数据结构。比如:

struct resume{int age;char name[10];double salary;
};

 4 、对象 将不同类型的数据、方法(即函数)放到一起,就是对象。比如:

class Student:company = "SXT"     #类属性count = 0           #类属性def __init__(self,name,score):self.name = name         #实例属性self.score = scoreStudent.count = Student.count+1def say_score(self):           #实例方法print("我的公司是:",Student.company)print(self.name,'的分数是:',self.score)

 类的定义

类可以看做是一个模版,或者图纸,系统根据类的定义来造出对象。我们要造一个汽车,怎么样造?类就是这个图纸,规定了汽车的详细信息,然后根据图纸将汽车造出来。

类:我们叫做 class 。 对象:我们叫做 object , instance (实例)。以后我们说某个类的对象,某个类的实例。是一样的意思。 

我们把对象比作一个“饼干”,类就是制造这个饼干的“模具”。

属性和方法 

我们通过类定义数据类型的属性(数据)和方法(行为),也就是 说,“类将行为和状态打包在一起”。

对象是类的具体实体,一般称为“类的实例”。类看做“饼干模具”,对 象就是根据这个“模具”制造出的“饼干”。

从一个类创建对象时,每个对象会共享这个类的行为(类中定义的方法),但会有自己的属性值(不共享状态)。更具体一点:“方法代码是共享的,属性数据不共享”。 

❤️Python中,“一切皆对象”。类也称为“类对象”,类的实例也 称为“实例对象”。

定义类的语法格式如下:

class  类名:类体

 要点如下:

1 类名必须符合“标识符”的规则;一般规定,首字母大写,多个单词使用“驼峰原则”。

2 类体中我们可以定义属性和方法

3 属性用来描述数据,方法(即函数)用来描述这些数据相关的操作

【操作】一个典型的类的定义

class Student:def __init__(self,name,score): #构造方法第一个参数必须为selfself.name = name         #实例属性self.score = scoredef say_score(self):           #实例方法print("{0}的分数是{1}".format(self.name,self.score))
s1 = Student('张三',80)  #s1是实例对象,自动调用__init__()方法
s1.say_score()

pass 为空语句。就是表示什么都不做,只是作为一个占位符存在。当你写代码时,遇到暂时不知道往方法或者类中加入什么时,可以先用pass占位,后期再补上。

对象完整内存结构 

类是抽象的,也称之为“对象的模板”。我们需要通过类这个模板, 创建类的实例对象,然后才能使用类定义的功能。 我们前面说过一个Python对象包含三个部分: id (identity识别码) type (对象类型)value (对象的值)。 现在,我们可以更进一步的说,一个Python对象包含如下部分:

 

实时效果反馈

1. 如下是一个典型类的定义代码和调用代码,说法错误的是: 

class Student:def __init__(self,name,score):self.name = name        self.score = scoredef say_score(self):          print("{0}的分数是{1}".format(self.name,self.score))
s1 = Student('张三',80)  
s1.say_score()

A __init__ 构造方法第一个参数可以不是self

B name 和 score 是属性

C say_score(self) 是方法

D s1 = Student('张三',80) , 其中s1是实例对象,自动调用 __init__() 方法

相关文章:

Python入门【LEGB规则、面向对象简介、面向过程和面向对象思想、面向对象是什么? 对象的进化 、类的定义、对象完整内存结构 】(十三)

👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误…...

【消息中间件】原生PHP对接Uni H5、APP、微信小程序实时通讯消息服务

文章目录 视频演示效果前言一、分析二、全局注入MQTT连接1.引入库2.写入全局连接代码 二、PHP环境建立总结 视频演示效果 【uniapp】实现买定离手小游戏 前言 Mqtt不同环境问题太多,新手可以看下 《【MQTT】Esp32数据上传采集:最新mqtt插件(支…...

【C语言初阶】指针篇—上

目录 1. 指针是什么?2. 指针和指针类型2.1 指针-整数2.2 指针的解引用 3. 野指针3.1 野指针成因1. 指针未初始化2. 指针越界访问3. 指针指向的空间释放 3.2 如何规避野指针 1. 指针是什么? 指针是什么? 指针理解的2个要点: > 1…...

基于FasterRCNN深度学习网络的车辆检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 ....................................................................... % 训练Faster R-…...

机器学习深度学习——多层感知机

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——感知机 📚订阅专栏:机器学习&&深度学习 希望文章对你们有所帮助 上一节…...

Django模型将模型注释同步到数据库

1、安装django-comment-migrate库 pip install django-comment-migrate 2、将库注册到settings.py文件中 INSTALLED_APPS [...django_comment_migrate, # 表注释... ] 3、加注释 3.1、给模型(表)加注释 在模型的class Meta中编辑 verbose_name&…...

STM32 Flash学习(二)

STM32F1的官方固件库操作FLASH的几个常用函数。这些函数和定义分布在源文件stm32f1xx_hal_flash.c/stm32f1xx_hal_flash_ex.c以及头文件stm32f1xx_hal_flash.h/stm32f1xx_hal_flash_ex.h中。 锁定解函数 对FLASH进行写操作前必须先解锁,解锁操作:在FLA…...

kotlin获取泛型集合的类型信息

通过 reified 关键字和内联函数来实现 inline fun <reified T> getClassFromList(list: List<T>): Class<T> {return T::class.java }fun main() {val list listOf("Hello", "World")val clazz getClassFromList(list)println(clazz)…...

AQS源码解析

关于 AQS&#xff0c;网上已经有无数的文章阐述 AQS 的使用及其源码&#xff0c;所以多这么一篇文章也没啥所谓&#xff0c;还能总结一下研究过的源码。源码解析和某某的使用&#xff0c;大概是互联网上 Java 文章中写得最多的主题了。 AQS AQS 是 AbstractQueuedSynchronize…...

关于在VS2017中编译Qt项目遇到的问题

关于在VS2017中编译Qt项目遇到的问题 【QT】VS打开QT项目运行不成功 error MSB6006 “cmd.exe”已退出,代码为 2。如何在VS2017里部署的Qt Designer上编辑槽函数 【QT】VS打开QT项目运行不成功 error MSB6006 “cmd.exe”已退出,代码为 2。 链接 如何在VS2017里部署的Qt Design…...

Python web实战 | 使用 Flask 实现 Web Socket 聊天室

概要 今天我们学习如何使用 Python 实现 Web Socket&#xff0c;并实现一个实时聊天室的功能。本文的技术栈包括 Python、Flask、Socket.IO 和 HTML/CSS/JavaScript。 什么是 Web Socket&#xff1f; Web Socket 是一种在单个 TCP 连接上进行全双工通信的协议。它是 HTML5 中的…...

Android10 Recovery系列(一)隐藏recovery菜单项

一 、背景 起因是遇到了一个隐藏删除recovery菜单项的需求。在寻找解决问题的时候,我经历了找到源码位置,调试修改,生效,思考是否可拓展,优化修改,符合要求的整个过程,下面简单分享一下。如果不想立即实现效果或者只想看解决方案,可以直接看总结那一个部分 二 、准备…...

选好NAS网络储存解决方案,是安全储存的关键

随着网络信息的发展&#xff0c;NAS也越来越受到企业的关注&#xff0c;NAS网络存储除了提供简单的存储服务外&#xff0c;还可以提供更好的数据安全性、更方便的文件共享方式。但市面上的产品种类繁多&#xff0c;我们该如何选择合适的产品&#xff0c;通过企业云盘&#xff0…...

AnimateDiff论文解读-基于Stable Diffusion文生图模型生成动画

文章目录 1. 摘要2. 引言3. 算法3.1 Preliminaries3.2. Personalized Animation3.3 Motion Modeling Module 4. 实验5.限制6. 结论 论文&#xff1a; 《AnimateDiff: Animate Your Personalized Text-to-Image Diffusion Models without Specific Tuning》 github: https://g…...

centos7安装tomcat

安装tomcat 必须依赖 JDK 环境&#xff0c;一定要提前装好JDK保证可以使用 一、下载安装包 到官网下载 上传到linux 服务器 二、安装tomcat 创建tomcat 文件夹 mkdir -p /usr/local/tomcat设置文件夹权限 chmod 757 tomcat将安装包上传至 新建文件夹 解压安装包 tar zx…...

【C#教程】零基础从入门到精通

今天给大家分享一套零基础从入门到精通&#xff1a;.NetCore/C#视频教程&#xff1b;这是2022年最新整理的、590G的开发教程资料。课程涵盖了.Net各方面的知识&#xff0c;跟着这个教程学习&#xff0c;就足够了。 课程分类 1、C#从基础到精通教程&#xff1b; 2、Winform从…...

opencv rtsp 硬件解码

讨论使用opencv的reader 硬件解码的方案有太多种&#xff0c;如果使用ffmpeg硬件解码是最方便的&#xff0c;不方便的是把解码过后的GPU 拉到 CPU 上&#xff0c;再使用opencv的Mat 从cpu 上上载到gpu上&#xff0c;是不是多了两个过程&#xff0c;应该是直接从GPU mat 直接去…...

机器学习-Gradient Descent

机器学习(Gradient Descent) videopptblog 梯度下降(Gradient Descent) optimization problem: 损失函数最小化 假设本模型有两个参数&#x1d703;1和&#x1d703;2&#xff0c;随机取得初始值 求解偏微分&#xff0c;梯度下降对参数进行更新 Visualize: 确定梯度方向&…...

MySql003——SQL(结构化查询语言)基础知识

一、数据库的相关概念 DB&#xff1a;数据库&#xff08;Database&#xff09; 即存储数据的“仓库”&#xff0c;其本质是一个文件系统。它保存了一系列有组织的数据。DBMS&#xff1a;数据库管理系统&#xff08;Database Management System&#xff09; 是一种操纵和管理数…...

springCloud Eureka注册中心配置详解

1、创建一个springBoot项目 2、在springBoot项目中添加SpringCloud依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2021.0.3</version><type>…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...