类和对象

现在这年头,怎么哪里都有对象?街上看了一路手拉手,回来学习还要看到”对象“。

是不是学会了对象,就有对象了?

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. 1.面向过程编程 2.面向对象编程 3.类和对象 4.python 创建类和对象 如何使用对象 5.属性的查找顺序 6.初始化函数 7.绑定方法 与非绑定方法

    1.面向过程编程 面向过程:一种编程思想在编写代码时 要时刻想着过程这个两个字过程指的是什么? 解决问题的步骤 流程,即第一步干什么 第二步干什么,其目的是将一个复杂的问题,拆分为若干的小的问题,按照 ...

  2. python的类和对象2(self参数)

    python的类和对象2(self参数) 1.python里面对象的方法都会有self参数,它就相当于C++里面的this指针:绑定方法,据说有了这个参数,Python 再也不会傻傻分不清是哪个对象在 ...

  3. Python初识类与对象

    Python初识类与对象 类与对象 世界观角度分析类与对象 类是一个抽象的概念,而对象是一个实体的存在,对象由类创造而出,每个对象之间互相独立互不影响,一个对象可以同时拥有多个类的方法,实例化就是通过 ...

  4. python的类与对象

    类与对象 1.什么是类 类和函数一样是程序编程的一种方式,在处理某些问题的时候类比函数更加适合让编程变得简化,在python里面函数式编程和类编程都是为了简化代码的一种编程方式,具体应用那个则由具体问 ...

  5. python的类和对象——番外篇(类的静态字段)

    什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是它.后面大多数情况可能会简称为类变量.): 我们看上面的例子,这里的money就是静态字段,首 ...

  6. python的类和对象——进阶篇

    写在前面的话 终于,又到了周五.当小伙伴们都不再加班欢欢喜喜过周末的时候,我刚刚写完这一周的游戏作业,从面对晚归的紧皱眉头到现在的从容淡定,好像只有那么几周的时间.突然发现:改变——原来这么简单.很多 ...

  7. Python 定制类与其对象的创建和应用

    1.创建新类Athlete,创建两个唯一的对象实例sarah james,他们会继承Athlete类的特性 >>> class Athlete: def __init__(self, ...

  8. 【Python】类和对象、继承、使用文件、存储、异常、标准库(不懂)

    当你调用这个对象的方法MyObject.method(arg1, arg2)的时候,这会由Python自动转为MyClass.method(MyObject, arg1, arg2)——这就是self ...

  9. 搞懂Python的类和对象名称空间

    代码块的分类 python中分几种代码块类型,它们都有自己的作用域,或者说名称空间: 文件或模块整体是一个代码块,名称空间为全局范围 函数代码块,名称空间为函数自身范围,是本地作用域,在全局范围的内层 ...

  10. Python深入类和对象

    一. 鸭子类型和多态 1.什么是鸭子类型: 在程序设计中,鸭子类型(英语:Duck typing)是动态类型和某些静态语言的一种对象推断风格."鸭子类型"像多态一样工作,但是没有继 ...

随机推荐

  1. 【c# 学习笔记】使用virtual和override关键字实现方法重写

    只有基类成员声明为virtual或abstract时,才能被派生类重写:而如果子类想改变虚方法的实现行为,则必须使用override关键字. public class Animal { private ...

  2. Java面试 - final、finally、finalize的区别?

    final:用于声明属性, 方法和类,分别表示属性不可变.方法不可覆盖.被其修饰的类不可继承. finally:异常处理语句结构的一部分,表示总是执行. finalize:Object 类的一个方法, ...

  3. Jmeter逻辑控制器: If控制器的解读

    Jmeter官网其实有很详细的文档,点此跳转到官网,下面我来解读一下官网的文档,如有错误,欢迎指出. 一.官网解读 Name 在结果树中显示的名字. Comments 备注.相当于代码中的注释. Ex ...

  4. JAVA支持字符编码读取文件

    文件操作,在java中很常用,对于存在特定编码的文件,则需要根据字符编码进行读取,要不容易出现乱码 /** * 读取文件 * @param filePath 文件路径 */ public static ...

  5. Ubuntu16.04 换源(或者404 Not Found问题)

    当执行sudo apt-get update或者sudo apt-get install命令时,出现以下两个问题: “apt-get 404 Not Found Package Repository ...

  6. Apache2.4+Tomcat7.0整合配置详解

    一.简单介绍 Apache.Tomcat Apache HTTP Server(简称 Apache),是 Apache 软件基金协会的一个开放源码的网页服务器,可以在 Windows.Unix.Lin ...

  7. Swiper 轮播插件 之 动态加载无法滑动

    1.原因:轮播图未完全动态加载完成,即初始化 2.方法一:ajax链式编程 $.ajax({ type: "get", url: serviceURL + "/listB ...

  8. 利用jwt生成token,用于http请求身份验证

    前段时间在做移动端接口过程中,考虑到安全性,所有移动端发送请求(除了登录请求)过程中进行token有效验证. 1.利用jwt生成token a.导入jwt相关包 <!-- jwt --> ...

  9. HTTP协议探究(五):H2中一些重要的概念

    一 复习与目标 1 复习 简单密码学.对称加密与非对称加密 数字签名.数字证书 SSL/TLS HTTPS = HTTP + SSL/TLS,SSL/TLS为HTTP提供了保密性.完整性和鉴别性 2 ...

  10. 微信小微商户申请入驻 .NET C#实现微信小微商户进件API

    微信小微商户申请入驻 .NET C#实现微信小微商户进件API官方小微商户专属接口文档 微信支付SDK 微信支付官方SDK与DEMO下载 图片上传 图片上传接口API文档 证书下载 证书下载接口API ...