“笨办法”学Python 3 ——练习 40. 模块、类和对象
练习40 模块、类和对象
知识点:
40.1.0 模块就像字典
my_stuff['apple'] #my_stuff是字典,访问字典apple键的值
import mystuff
mystuff.apple() #mystuff是模块,模块访问函数apple()
print(mystuff.tangerine) #模块访问变量tangerine
说明Python 中有一个非常通用的模式:
(1)用一个键=值(key=value)形式的容器。
(2)通过键的名称来从中获取内容。
(3)在字典中,键是一个字符串,语法是:[key]。而在模块中,键是一个识别符,语法是 .key,除此之外它们几乎是同一种东西。
—————————————————————————————————————————
40.1.1 类就像模块
类:类是一种整合一组函数和数据的方式,它将函数和数据放在一个容器内以便通过 . 运算符进行访问。类与模块功能相似,可以存储Python代码。但是类比模块更复杂,且在一个脚本程序中,模块就一个,而类可以复制很多。
语法:
class Name(object):def __init__(self,类属性1,类属性2, ......):self.类属性1 = 属性1self.类属性2 = 属性2......def 函数1(self, 参数1,参数2)内容.......
其中 init(self)函数:两个下划线开头的函数是声明该属性为私有,不能在类的外部被使用或访问;在python中我们可以使用__init__()方法来传递参数,比如赋值给对象属性等;__init__函数的第一个参数必须为self,后续参数为自己定义。
创建类,示例:
class Mystuff(object): #创建类,类名第一个字母大写def __init__(self): #函数__init__,初始化类self.tangerine = "And now a thousand years between"def apple(self): #创建函数appleprint("I AM CLASSY APPLES!")
**注意:**创建类,一般都需要用到__init__(self)函数,主要原因:1.类会多次实例化,再调用前初始化。2.为了方便后面的创建实例的时候,给实例绑定上属性。 类的使用需要了解对象object。
40.1.2 对象就像import
类会有与模块中import类似的概念,被称为“实例化”或者“创造”,当类实例化后得到的东西叫做对象。实例化的方法就是像调用函数一样调用一个类,所有从类里面实例化出来的对象都具备这个类中提供的方法,python中调用一个类的时候,会以这个类为蓝本创建一个同类型的副本。
示例:
#输入
thing = Mystuff() #实例化类,对象thing,具有这个类的所有函数,变量等
thing.apple() #该对象可以调用类中包含的函数。
print(thing.tangerine) #该对象可以调用类中包含的变量。#输出
And now a thousand years between
总结:
(1)类就像新的小型模块的蓝本,类在模块中创建。
(2)实例化就是如何创建这些小型模块并同时导入(调用)它们,即创建一个类的对象。
(3)所创建的小型模块的结果被称作对象,然后将它赋值给一个变量来使用(类似与import)。
40.1.3 获取数据
字典、模块以及类中获取其内容的方式总结如下:(不同的键值对)
#字典获取方式
mystuff['apples'] #通过键值对,访问内容#模块获取方式
mystuff.apples() #mystuff是模块,模块.函数名访问内容
print(mystuff.tangerine) #模块.变量名访问内容#类获取方式
thing = MyStuff() #创建一个空对象
thing.apples() #调用类中的函数
print(thing.tangerine) #调用类中的变量
40.1.4 第一个类的例子
源代码
class Song(object): #定义类Songdef __init__(self, lyrics): #初始化,定义类的属性lyrics(抒情诗)self.lyrics = lyrics #实例的属性def sing_me_a_song(self): # 定义函数for line in self.lyrics:print(line)#实例化对象happy_bday
happy_bday = Song(["Happy birthday to you","I don't want to get sued","So I'll stop right there"])#实例化对象bulls_on_parade
bulls_on_parade = Song(["They rally around the family","With pockets full of shells"])happy_bday.sing_me_a_song() #调用类里面的函数sing_me_a_song()bulls_on_parade.sing_me_a_song()#调用类里面的函数sing_me_a_song()
输出结果
Happy birthday to you
I don't want to get sued
So I'll stop right there
They rally around the family
With pockets full of shells
附加练习
1. 用这个方法再写一些歌,确保你明白你正在用字符列表来传歌词。
示例:
class Song(object): #定义类Songdef __init__(self, lyrics): #初始化,定义类的属性lyrics(抒情诗)self.lyrics = lyrics #实例的属性def sing_me_a_song(self): # 定义函数for line in self.lyrics:print(line)#附加练习,实例化对象happy
happy = Song(["When we are children","The God told us","when you feel happy","Although you have nothing","You also feel the world is very huge"])#调用类的函数sing_me_a_song
happy.sing_me_a_song()
输出结果:
When we are children
The God told us
when you feel happy
Although you have nothing
You also feel the world is very huge
2. 把歌词放在一个单独的变量里,然后把这个变量放在类里面来使用。(将歌词变成单独的变量,传递给类使用)
示例:
#附加练习2,将歌词放入变量中。#创建变量Sing_1为列表
Sing_1 = ["Happy birthday to you","I don't want to get sued","So I'll stop right there"]#创建变量Sing_2为列表
Sing_2 = ["When we are children","The God told us","when you feel happy","Although you have nothing","You also feel the world is very huge"]#创建对象F_Song,S_Song
F_Song = Song(Sing_1)
S_Song = Song(Sing_2)#调用类中的函数
F_Song.sing_me_a_song()
S_Song.sing_me_a_song()
输出结果
Happy birthday to you
I don't want to get sued
So I'll stop right there
When we are children
The God told us
when you feel happy
Although you have nothing
You also feel the world is very huge
3.在网上搜搜“面向对象的编程”,然后填满你的大脑。别担心你看不懂,因为几乎一半的东西我也看不懂。
(1)面向对象编程:Object Oriented Programming,简称OOP,是一种程序设计方法。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的方法。Python就是一种面向对象的语言,支持面向对象编程,在其内部,一切都被视作对象。
(2)面向对象编程中,将函数和变量进一步封装成类,类才是程序的基本元素,它将数据和操作紧密地连结在一起,并保护数据不会被外界的函数意外地改变。类和和类的实例(也称对象)是面向对象的核心概念,是和面向过程编程、函数式编程的根本区别。
(3)类不同于函数,具有封装、继承和多态三大特点。一个类定义了具有相似性质的一组对象。而继承性是对具有层次关系的类的属性和操作进行共享的一种方式。继承将在后面学到。
(4)面向过程编程和面向对象编程的区别(简单例子),面向过程编程比面向对象编程更冗余。:
用函数进行面向过程编程:
def speak(animal):if animal == "狗":print("旺旺!")elif animal == "猫":print("喵!喵!")elif animal == "牛":print("哞!哞!")else:print("说人话!")a, b, c, d = "猫", "狗", "牛", "二哈"speak(a)
speak(b)
speak(c)
speak(d)
用面向对象编程如下:
用面向对象编程可以轻松的创建甚至几百万的对象。
# 先定义一个动物的类
class Animal:# 动物实例的初始化方法,需要提供动物类别和该类动物的叫声def __init__(self, kind, voice):self.kind = kindself.voice = voice# 让动物发出叫声的方法def speak(self):print(self.voice)# 实例化四种动物对象
a = Animal("狗", "旺旺!")
b = Animal("猫", "喵!喵!")
c = Animal("牛", "哞!哞!")
d = Animal("二哈", "说人话!")# 调用动物类的发声方法
a.speak()
b.speak()
c.speak()
d.speak()
常见问题
- 为什么在类下面用 init 函数或者其他函数的时候要用 self ? 如果不用 self,那么像 cheese = ‘Frank’ 这样的代码就会很含糊,计算机不知道你是指实例的 cheese 属性还是 一个叫做 cheese 的局部变量。而用 self.cheese = ‘Frank’ 的话就会很清晰,你是指实例的属性 self.cheese 。(self是为了表明实例)
相关文章:
“笨办法”学Python 3 ——练习 40. 模块、类和对象
练习40 模块、类和对象 知识点: 40.1.0 模块就像字典 my_stuff[apple] #my_stuff是字典,访问字典apple键的值 import mystuff mystuff.apple() #mystuff是模块,模块访问函数apple() print(mystuff.tangerine) #模块访问变量tangerine说明P…...
自动驾驶:BEVDet
自动驾驶:BEVDetIntroductionMethodoloData AugmentationNetwork StructureScale-NMS实验Introduction 作者通过现有的算法(LSS)、独特的数据增强方案与新的NMS方案整合了一个BEV框架(BEVDet)。 如下图: …...
vue的组件通信
文章目录3. 组件通信3.1 父组件-->子组件3.3组件自定义事件(子->父)3.4.全部事件总线(两代以上)3.5消息的订阅与发布3. 组件通信 3.1 父组件–>子组件 <Student name"张三" :age"18"></St…...
Typescript的定义及使用优势
编程语言的类型: 动态类型语言 (Dynamically Typed Language)静态类型语言 (Statically Typed Language) 两种语言的含义及区别: 比如JS、python就是动态类型语言,什么是动态类型语言,通俗的讲࿰…...
正则验证:手机号码验证
<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title></title> </head> <body> 手机号码<input type"text" id"phone"> <span…...
视频融合 flv流格式对接(上)
FLV 是FLASH VIDEO的简称,FLV流媒体格式是随着Flash MX的推出发展而来的视频格式。由于它形成的文件极小、加载速度极快,使得网络观看视频文件成为可能,它的出现有效地解决了视频文件导入Flash后,使导出的SWF文件体积庞大…...
提问:影视剪辑解说都是怎样配音的,软件合成还是自己配音?
“影视剪辑解说都是怎样配音的,软件合成还是自己配音?”这是一个很好的问题并且困扰着很多人,因为不知道该如何选择。究竟应该使用软件来完成配音工作呢?还是自己动手配音呢?这是一个很难回答的问题。如果你问我的话,…...
基于RK3588的嵌入式linux系统开发(二)——uboot源码移植及编译
由于官方的SDK占用空间较大(大约20GB左右),需要联系相关供应商提供,且官方的SDK通过各种脚本文件进行集成编译,难以理解系统开发的详细过程。本章介绍直接从官方Github网站下载源码进行移植,进行uboot移植及…...
excel报表技巧:几个关于汇报演示方面的小功能
年终了,总结汇报避免不了。如果你的PPT还不够好,那就直接用Excel做汇报吧~这里有5条小技巧,可以帮助你最高效地展示自己的成绩报表!想象一下,用SHIFTCTRLF1全屏显示你的工作表,配合上CtrlPageDown进行工作表…...
【数据结构与算法】Manacher算法
🌠作者:阿亮joy. 🎆专栏:《数据结构与算法要啸着学》 🎇座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉…...
【CMake】CMake构建C++代码(一)
在Linux开发过程中,难免会用到CMake来构建你的代码。本文将说明如何构建自己的代码,将自己的代码变为共享库,共其他代码使用。 文章目录在Linux开发过程中,难免会用到CMake来构建你的代码。本文将说明如何构建自己的代码ÿ…...
让我们,从头到尾,通透I/O模型
什么是IO 一句话总结 IO就是内存和硬盘的输入输出 I/O 其实就是 input 和 output 的缩写,即输入/输出。 那输入输出啥呢? 比如我们用键盘来敲代码其实就是输入,那显示器显示图案就是输出,这其实就是 I/O。 而我们时常关心的磁盘…...
Word控件Spire.Doc 【Table】教程(16):C#/VB.NET:在 Word 表格中插入或提取图像
Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…...
C++如何实现系统语言切换功能,MessageBox的确认/取消按钮语言显示如何跟程序一致
文章目录前言 一、新建工程二、添加多国语言的资源三、程序语言设置四、语言切换五、字符串处理六、MessageBox的问题七、相关函数和类型参考文章前言 目前很多软件都是要出口到多个国家,多个地区,因此,为软件提供多国语言支持就成为了一个基…...
计算机组成原理学习笔记:循环冗余校验码
循环冗余校验码 CRC 码 循环冗余校验码 (cyclic redundancy Check, CRC) 十进制除法 从熟悉的十进制出发,假设现在你要给另一个人传送882这样的一个10进制数据,为了防止传送数据的过程中某一个数据发生错误你可以和你的另一个小伙伴约定一个除数&…...
Educational Codeforces Round 143 (Rated for Div. 2) A — C
Educational Codeforces Round 143 (Rated for Div. 2) 文章目录A. Two Towers题目大意题目分析codeB. Ideal Point题目大意题目分析codeC. Tea Tasting题目大意题目分析codeA. Two Towers 题目大意 有两个有红蓝两种颜色组成的塔,每次操作可以将其中一个塔顶的色…...
【Unity VR开发】结合VRTK4.0:将浮点数从交互器传递到可交互对象
语录: 愿你熬得过万丈孤独,藏得下星辰大海。 前言: 默认情况下,交互器只能将单个布尔操作传递给可交互对象,后者控制可交互对象上的抓取操作。在其他时候,交互器中的其他操作可能希望传递给可交互对象&…...
【图像分类】基于PyTorch搭建卷积神经网络实现MNIST手写数字识别(附项目完整代码)
写在前面: 首先感谢兄弟们的关注和订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 在【图像分类】基于PyTorch搭建LSTM实现MNIST手写数字体识别(单向LSTM,附完整代码和数据集)文章中,我们使用了…...
4.4 MQC
1. 实验目的 熟悉MQC的应用场景掌握MQC的配置方法2. 实验拓扑 实验拓扑如图4-10所示: 图4-10:MQC 3. 实验步骤 (1) IP地址的配置 AR1的配置 <Huawei>system-view...
ClickHouse列存储(十一)—— ClickHouse
文章目录一、重点内容:1.数据库基本概念2.列式存储3.clickHouse存储设计4.clickHouse典型应用场景二、准备工作:1、了解数据库基本概念2、了解列式存储相关概念3、了解ClickHouse存储设计4、了解 ClickHouse典型应用场景三、详细知识点介绍:1…...
公司来了个卷王,真让人奔溃
2022年已经结束结束了,最近内卷严重,各种跳槽裁员,相信很多小伙伴也在准备今年的金三银四的面试计划。 在此展示一套学习笔记 / 面试手册,年后跳槽的朋友可以好好刷一刷,还是挺有必要的,它几乎涵盖了所有的…...
什么是refresh?Spring refresh 流程
refresh 是 AbstractApplicationContext 中的一个方法,负责初始化 ApplicationContext 容器,容器必须调用 refresh 才能正常工作。它的内部主要会调用 12 个方法,我们把它们称为 refresh 的 12 个步骤:1. prepareRefresh2. obtain…...
Python登陆系统
前言 #源码见文末公众号哈# 登录系统 一个简单的登录系统包含了登录账户、注册账户、修改密码以及注销账户的操作。 1. 登录账户 登录系统主要需要判断账户是否存在,不存在就注册一个账户,如果第一次登录系统,我们需要先新建一个文件&…...
【新2023】华为OD机试 - 重组字符串(Python)
华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 重组字符串 题目 给定一个非空字符串 S,其被 N 个‘-’分隔成 N+1 的子串,给定正整数 K, 要求除第一个子串外,其余的子串每 K 个字符组成新的子串,并用‘-’分隔。 对于新组成的每一个子串,如果它…...
视频监控流程图
<html> <head> <meta http-equiv"Content-Type" content"text/html; charsetUTF-8"/> <link rel"stylesheet" type"text/css" href"visio.css"/> <title> 视频监控流程图 </title> <…...
普通单双面板的生产工艺流程之图形转移,华秋一文告诉你
衔接上文,继续为朋友们分享普通单双面板的生产工艺流程。 如图,第五道主流程为图形转移。 图形转移的目的为: 利用光化学原理,将图形线路的形状转移到印制板上,再利用化学原理,将图形线路在印制板上制作出…...
1.8 providers
生成providersnest g service <name>providers的注入方式构造函数注入Injectable() export class KeywordService {constructor(private readonly httpService: HttpService,private readonly pro: ProService,) {} }Inject()注入export class KeywordController {Inject…...
如何编写一个基本的 Verilog Module(模块)
1、概述这篇文章主要介绍了 Verilog 在 FPGA 设计中的概念和使用方法。首先讨论使用模块(module)关键字构造 Verilog 设计的方式,以及这与所描述的硬件的关系。这包括对参数、端口(port)和例化(instantiato…...
让乔布斯想要「发动核战争」的 Android,为何成了占有率最高的系统?
2008 年 9 月 23 日,Apple 的创始人和 CEO 史蒂夫乔布斯像往常一样走进了公司,此时距离初代 iPhone 的发布会才过了一年半,这款充满了争议的产品就像一块从山崖滚落的巨岩,一路电光石火的给手机市场的《小石潭记》来了场焚书坑儒。…...
FPGA开发软件(vivado + modelsim)环境搭建(附详细安装步骤+软件下载)
本文详细介绍了vivado软件和modelsim软件的安装,以及vivado中配置modelsim仿真设置,每一步都加文字说明和图片。一、软件安装包下载1、vivado vivado版本很多,目前最新的已更新到vivado2022.2,版本越高,安装包越大&…...
wordpress 文章 属性/广告推广平台代理
本文主要跟大家一起来探讨一下Cocos Creator小游戏开发过程中内存优化、性能优化和包体优化。 一、内存优化 因为 iOS小游戏和微信共用同一个进程,而微信在连续两次收到系统内存警告的时候会关闭小游戏并释放小游戏占用的内存。如果你的小游戏有外网用户反馈“闪退”…...
wordpress标志/全面的seo网站优化排名
6、到这里我们就可以打开Win7本地连接属性了,在里边即可更高本地连接IP地址了,如下图所示,我们切换到网络一栏,然后选中“ Internet 协议版本4 ”,然后点击下边的属性,如下图所示1、2、3步骤:7…...
柳州游戏网站建设/磁力库
在分析peer的具体交易工作之前,我们可以先分析一下fabric的配置系统。看下 /fabric/peer/main.go 的main函数源码,除了一系列mainCmd的命令操作,还有viper进行的一系列配置操作,并通过 err : common.InitConfig(cmdRoot)进行了配置…...
织梦网站模板免费/如何提高seo关键词排名
因为项目需要,最近研究了一下在mysql数据库下如何动态新建以及删除分区表。如果全部借助存储过程的话,新建以及删除分区表在逻辑上比较死板、不灵活,而且还容易出错。因此,我新建了一个数据表table_fen_qu,借助这个表可…...
北关网站制作/互联网推广是什么
在oracle 11g release 2 版本中新增的listagg函数,listagg是一个实现字符串聚合的oracle内建函数;listagg(column,‘分隔符‘) within group (order by column) over(partition by column)分隔符可以为空,order by必选项,可以order by null(1…...
网站怎么做的支付宝接口/网络营销专业是干什么的
文|曾响铃 来源|科技向令说(xiangling0815) 元旦已过,眼看农历新年马上来临,又到了一年一度“囤货”的季节。有一类产品的“热度”从2019年春节期间,一直延续至今,那就是水果。 在2019年春节期间&#x…...