python的类和对象(1)
类和对象
现在这年头,怎么哪里都有对象?街上看了一路手拉手,回来学习还要看到”对象“。
是不是学会了对象,就有对象了?

1.定义:
百度解释:
对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型。
它们的关系是,对象是类的实例,类是对象的模板。
港真,第一次接触这么专业的词语时,我是懵逼的。

看来,对象不是那么好找的。
好了,正经一点。要学习的呢! 什么是类,什么是对象呢?
通俗一点讲:
拿化妆这件事来比喻,可以把类理解成“妆容”(一个大概念),而对象可以理解成“烟熏妆”、“复古妆”、“咬唇妆”、“新娘妆”(具体的妆容)。
又或者拿我们吃的面来讲,可以把类理解成“面”,

而对象可以理解成“热干面”、“牛肉刀削面”、“葱油拌面”、“川味凉面”……等等。



可以看出,类就是一个抽象的概念,它不具体指代某一样东西。类似上级下达的一个总方针、指令(看做一个类),而对象就是具体到每一个人的实行方案。每位员工在接到上级命令后,因不一样的处境、逻辑思维,最后,小明有了小明的执行方案(对象A),小红有了小红的执行方案(对象B)。
可以说,类是一个基础,在此基础上,发展出了各个对象。(就像有了爸爸,后来有了很多很多个可爱的儿子(●'◡'●)。)
2.说说为什么要用类
故事是这样子滴
Hush 今天想画个烟熏妆,流程如下:
洁面 --- 化妆水 --- 面部精华 --- 乳液/面霜 --- 防晒霜 --- 粉底 --- 散粉 --- 画眉 --- 腮红 --- 口红
#烟熏妆
def MakeupSmokyClean():
#清洁步骤
print("烟熏妆清洁完毕")
def MakeupSmokyWater():
#补水步骤
print("烟熏妆补水完毕")
def MakeupSmokyeEssence():
#搽精华步骤
print("烟熏妆搽精华液完毕")
def MakeupSmokyCream():
#搽面霜步骤
print("烟熏妆搽面霜完毕")
def MakeupSmokySunscreen():
#防晒步骤
print("烟熏妆防晒完毕")
def MakeupSmokyFoundation():
#上粉底步骤
print("烟熏妆上粉底完毕")
def MakeupSmokyLoosepowder():
#上散粉步骤
print("烟熏妆定妆完毕")
def MakeupSmokyEyebrows():
#画眉步骤
print("烟熏妆画眉完毕")
def MakeupSmokyBlush():
#上腮红步骤
print("烟熏妆画腮红完毕")
def MakeupSmokyLipstick():
#涂口红步骤
print("烟熏妆涂口红完毕")
def MakeupSmokyCheck():
#最后检查一下
print("检查完毕")
MakeupSmokyClean()
MakeupSmokyWater()
MakeupSmokyeEssence()
MakeupSmokyCream()
MakeupSmokySunscreen()
MakeupSmokyFoundation()
MakeupSmokyLoosepowder()
MakeupSmokyEyebrows()
MakeupSmokyBlush()
MakeupSmokyLipstick()
MakeupSmokyCheck()
烟熏妆清洁完毕
烟熏妆补水完毕
烟熏妆搽精华液完毕
烟熏妆搽面霜完毕
烟熏妆防晒完毕
烟熏妆上粉底完毕
烟熏妆定妆完毕
烟熏妆画眉完毕
烟熏妆画腮红完毕
烟熏妆涂口红完毕
检查完毕
终于画完了!画个妆不容易呀!
Hush 坐下来,看了看 Taylor 的照片,想了想要不明天来个复古妆?

于是,第二天出门前,Hush又开始她的化妆表演……
#复古妆
def MakeupRetroClean():
#清洁步骤
print("复古妆清洁完毕")
def MakeupRetroWater():
#补水步骤
print("复古妆补水完毕")
def MakeupRetroEssence():
#搽精华步骤
print("复古妆搽精华液完毕")
def MakeupRetroCream():
#搽面霜步骤
print("复古妆搽面霜完毕")
def MakeupRetroSunscreen():
#防晒步骤
print("复古妆防晒完毕")
def MakeupRetroFoundation():
#上粉底步骤
print("复古妆上粉底完毕")
def MakeupRetroLoosepowder():
#上散粉步骤
print("复古妆定妆完毕")
def MakeupRetroEyebrows():
#画眉步骤
print("复古妆画眉完毕")
def MakeupRetroBlush():
#上腮红步骤
print("复古妆画腮红完毕")
def MakeupRetroLipstick():
#涂口红步骤
print("复古妆涂口红完毕")
def MakeupRetroCheck():
#最后检查一下
print("检查完毕")
MakeupRetroClean()
MakeupRetroWater()
MakeupRetroEssence()
MakeupRetroCream()
MakeupRetroSunscreen()
MakeupRetroFoundation()
MakeupRetroLoosepowder()
MakeupRetroEyebrows()
MakeupRetroBlush()
MakeupRetroLipstick()
MakeupRetroCheck()
复古妆清洁完毕
复古妆补水完毕
复古妆搽精华液完毕
复古妆搽面霜完毕
复古妆防晒完毕
复古妆上粉底完毕
复古妆定妆完毕
复古妆画眉完毕
复古妆画腮红完毕
复古妆涂口红完毕
检查完毕
哇,终于画完了,每次化妆都要这么久,如果我活个八十岁,那不是要……
然后,Hush赶不上7点40分的地铁。最后迟到了。
老板要扣钱!扣钱!扣钱!
稳食艰难 看看自己的口袋,啊,我的钱,不活了……
But……
主角不能死啊,于是,Hush慢慢冷静下来
Hush想:有没有一个神器,可以让这些通用的步骤一键完成,其他的(比如高光、遮瑕、眼影,balabala的)化妆步骤在Hush心情特别好 or 出席隆重场合时才特别写出来呢?
上天保佑,大神们早早就创造出了 Hush 想要的“类”。
类把通用的特性封装在一个盒子里,你想用的时候调用这个类就行了。
如果你有新的有独创性的东西,你可以重新 def 一下你需要重新定义的,覆盖掉以前的写的东西,其他没改变的地方就不用重新def (不写就代表你继续用以前的方法,不做改变),这样你就可以剩下很多很多的时间啦。时间诚可贵呀!
下面是时候见识一下类的强大啦:
class Makeup(object):
"基本化妆步骤"
def __init__(self, style):
self.style = style
def Clean(self):
#清洁步骤
print(self.style + "清洁完毕")
def Water(self):
#补水步骤
print(self.style + "补水完毕")
def Essence(self):
#搽精华步骤
print(self.style + "搽精华液完毕")
def Cream(self):
#搽面霜步骤
print(self.style + "搽面霜完毕")
def Sunscreen(self):
#防晒步骤
print(self.style + "防晒完毕")
def Foundation(self):
#上粉底步骤
print(self.style + "上粉底完毕")
def Loosepowder(self):
#上散粉步骤
print(self.style + "定妆完毕")
def Eyebrows(self):
#画眉步骤
print(self.style + "画眉完毕")
def Blush(self):
#上腮红步骤
print(self.style + "画腮红完毕")
def Lipstick(self):
#涂口红步骤
print(self.style + "涂口红完毕")
def Check(self):
#检查
print("检查完毕")
def integrate():
#一键组合
Clean()
Water()
Essence()
Cream()
Sunscreen()
Foundation()
Loosepowder()
Eyebrows()
Blush()
Lipstick()
Check()
print(self.style + "一键组合完毕")
在类里面,参数 style 可以是我们想要的各种妆容,可以是烟熏妆、复古妆、新娘妆……
不用每一次画一种妆,都要一步一步地写同样的东西啦……
相当于有了个基本框架 Makeup,我们具体的每一种妆容可以继承这个框架,也可以修改框架里的东西,也可以扩展新的东西。这就是类的绝妙之处啦!
我们较完整的化妆步骤为:
洁面 --- 化妆水 --- 面部精华 --- 乳液/面霜 --- 防晒霜 ---粉底---(遮瑕)---散粉---画眉---眼影---眼线---睫毛膏---修容---高光----腮红---口红
如果我们想在上面已写的程序基础上,加个眼影、眼线,那么我们就要在上面Makeup的基础上,加上
class Advanced1(Makeup): #儿子写在前面,爸爸写在括号里(正经点,就是派生类在外面,基类在括号里)
def Eyeshadow(self):
#画眼影
print(self.style + "画眼影完毕")
def Eyeliner(self):
#画眼线
print(self.style + "画眼线完毕")
其他步骤不用重复写,就相当于直接继承老爸的特性。
意味着 Hush 完成了 :洁面 --- 化妆水 --- 面部精华 --- 乳液/面霜 --- 防晒霜 --- 粉底 --- 散粉 --- 画眉 --- 腮红 --- 口红。
And then,因为每种妆容的特点是不一样的,我们拿眉型来说,不一样的妆容,它强调的东西、想要表达的东西是不一样的,那么眉头、眉峰、眉尾、眉的倾斜度、眉的长度是不一样的。
比如我们今天回家,第一,考虑到不化妆,可能有点残,爸爸妈妈以为我经历了什么风霜;第二,化太浓,老爸老妈会担心,女儿是不是在外面学坏了。Consequently,今天要画淡妆。要这样这样画:
class Advanced2(Makeup):
def Eyebrows(self):
#淡妆画眉步骤,bala bala
print(self.style + "画眉完毕")
这就相当于覆盖了原来的画眉方法(也可以说,重写了画眉步骤)。这样,我们就有了淡妆的专属眉妆。
从整个复杂、漫长的化妆过程来看,我们深有体会到类的好处。
有了类,我们可以支配更多的时间。
In conclusion:
类的好处最能体现在继承这一点上。
- 我们可以直接复用代码,不用花时间写重复的东西,同时可以降低出错率
- 我们也可以在类的基础上,扩展新方法
Consequently,我们要用到类来帮助我们成为一个懒惰的程序员呀。
3.什么是类、对象
下面放上官方解释:
- 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
- 方法:类中定义的函数。
- 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
- 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
- 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
- 局部变量:定义在方法中的变量,只作用于当前实例的类。
- 实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。
- 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
- 实例化:创建一个类的实例,类的具体对象。
- 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
可以说,类 = 属性 + 方法
#常见格式
class ClassName: #类的名字,采用大驼峰命名法
<statement-1>
.
.
.
<statement-N>
在statement里,一般会定义类的属性和方法。
而对象是类的实例化。在实例化后,就可以用类的属性和方法啦。
**举个栗子:实例化一个类并用其属性及方法 **
先定义一个类
class Beauty():
#定义一个类,有属性,有方法
name = "Taylor"
def Words(self):
return("You are my sunshine.")
a = Beauty() #将类Beauty实例化
print("类Beauty的属性 name 为:", a.name)
print("类Beauty的方法 Words 为:", a.Words())
类Beauty的属性 name 为: Taylor
类Beauty的方法 Words 为: You are my sunshine.

哎呀,我女神真漂亮,我什么时候能变得这么beautiful呀?

先到这,下篇继续~~
python的类和对象(1)的更多相关文章
- 1.面向过程编程 2.面向对象编程 3.类和对象 4.python 创建类和对象 如何使用对象 5.属性的查找顺序 6.初始化函数 7.绑定方法 与非绑定方法
1.面向过程编程 面向过程:一种编程思想在编写代码时 要时刻想着过程这个两个字过程指的是什么? 解决问题的步骤 流程,即第一步干什么 第二步干什么,其目的是将一个复杂的问题,拆分为若干的小的问题,按照 ...
- python的类和对象2(self参数)
python的类和对象2(self参数) 1.python里面对象的方法都会有self参数,它就相当于C++里面的this指针:绑定方法,据说有了这个参数,Python 再也不会傻傻分不清是哪个对象在 ...
- Python初识类与对象
Python初识类与对象 类与对象 世界观角度分析类与对象 类是一个抽象的概念,而对象是一个实体的存在,对象由类创造而出,每个对象之间互相独立互不影响,一个对象可以同时拥有多个类的方法,实例化就是通过 ...
- python的类与对象
类与对象 1.什么是类 类和函数一样是程序编程的一种方式,在处理某些问题的时候类比函数更加适合让编程变得简化,在python里面函数式编程和类编程都是为了简化代码的一种编程方式,具体应用那个则由具体问 ...
- python的类和对象——番外篇(类的静态字段)
什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是它.后面大多数情况可能会简称为类变量.): 我们看上面的例子,这里的money就是静态字段,首 ...
- python的类和对象——进阶篇
写在前面的话 终于,又到了周五.当小伙伴们都不再加班欢欢喜喜过周末的时候,我刚刚写完这一周的游戏作业,从面对晚归的紧皱眉头到现在的从容淡定,好像只有那么几周的时间.突然发现:改变——原来这么简单.很多 ...
- Python 定制类与其对象的创建和应用
1.创建新类Athlete,创建两个唯一的对象实例sarah james,他们会继承Athlete类的特性 >>> class Athlete: def __init__(self, ...
- 【Python】类和对象、继承、使用文件、存储、异常、标准库(不懂)
当你调用这个对象的方法MyObject.method(arg1, arg2)的时候,这会由Python自动转为MyClass.method(MyObject, arg1, arg2)——这就是self ...
- 搞懂Python的类和对象名称空间
代码块的分类 python中分几种代码块类型,它们都有自己的作用域,或者说名称空间: 文件或模块整体是一个代码块,名称空间为全局范围 函数代码块,名称空间为函数自身范围,是本地作用域,在全局范围的内层 ...
- Python深入类和对象
一. 鸭子类型和多态 1.什么是鸭子类型: 在程序设计中,鸭子类型(英语:Duck typing)是动态类型和某些静态语言的一种对象推断风格."鸭子类型"像多态一样工作,但是没有继 ...
随机推荐
- 【ARM-Linux开发】Linux查看设备驱动
驱动操作命令: insmod / modprobe 加载驱动 rmmod 卸载驱动 lsmod 查看系统中所有已经被 ...
- csu 1901: 赏赐 OR 灾难
1901: 赏赐 OR 灾难 Submit Page Summary Time Limit: 1 Sec Memory Limit: 128 Mb Submitted: 86 ...
- eNSP——配置基于地址池的DHCP
原理: 实验案例: 拓扑图: 实验编址: 1.基础配置 根据实验编址进行实验的基础配置. 2.基于接口配置DHCP Server功能 在R1上开启dhcp 功能,在接口上开启dhcp服务功能,指定从接 ...
- mysql配置优化的参数
1.MySQL数据库高效优化解析 Mysql优化是一项非常重要的工作,而且是一项长期的工作,曾经有一个为位DBA前辈说过:mysql的优化,三分配置的优化,七分sql语句的优化. Mysql的优化: ...
- 后ARM时代,嵌入式工程师的自我修养
1 嵌入式学习的一些概念理解误区 很多嵌入式初学者认为,学嵌入式,就是学习ARM,就是学习开发板.买一块开发板,然后在上面“移植”u-boot.Linux内核,再使用busybox制作一个根文件系统, ...
- js 读取文本文件,日志内容
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- ota编译及差分包制作
OTA L 版本OTA build diff OTA升级的步骤如下: 1.new整个project. 2.Step1: ./vendor/mediatek/proprietary/scripts/si ...
- Java基础---Java 开发工具IntelliJ IDEA 快捷操作
IDE中快捷编写函数的方法 public static void main(String[] args) ===> psvm System.out.println(); ====> sou ...
- Python 基础教程 | 菜鸟教程
https://www.runoob.com/python/python-install.html
- MogileFS安装
MogileFS是一款开源的.高性能的.分布式的文件系统,用于组建分布式文件集群.用来存取海量文件,而不用关心具体的文件存放位置.存储容量大小,以及文件损坏和丢失等问题 MogileFS有三大部分:存 ...