python是一门面向对象的语言,体现面向对象的技术就是类。想要在python编程上进阶,就必须理解和运用类来解决问题。本期的内容难度有所上升,有时间的同学一定要把文中的代码敲一遍,以便加深对类的理解。

为什么需要类?

对于一个学生Jack而言,他的语数英三门成绩分别是88, 85, 94,不难想到用字典{ "Chinese": 88, "Mathemathics": 85, "English": 94 }来描述。如果要计算他的平均分,需要使用表达式average = sum([Jack[i] for i in Jack])/len(Jack)来计算。

# 计算Jack同学的平均分

>>> Jack = { "Chinese": 88, "Mathemathics": 85, "English": 94 }

# 使用了列表推导式获取列表[88, 85, 94],对该列表使用sum()方法返回代数和,最后数以科目数,算出平均分

>>> average = sum([Jack[i] for i in Jack])/len(Jack)

>>> print(average)

89.0

# 对于Lucy同学而言,还需要重复Jack的操作

>>> Lucy ={ "Chinese": 92, "Mathemathics": 98, "English": 80 }

>>> average = sum([Lucy[i] for i in Lucy])/len(Lucy)

>>> print(average)

90.0

如果还有一个学生Lucy呢,这么数据和计算平均分的代码又要重新写一遍。我们知道函数的诞生,就是因为要实现单功能的算法代码的复用。那么类的诞生,其实是为了实现复用特定的数据结构和算法。上面的数据和算法,可以用类来改写,实现更高层次的抽象和复用。

# 定义一个Student类

>>> class Student(object):

··· """ Three course of a student, including Chinese, Mathematics and English """

··· def __init__(self, Chinese, Mathematics, English):

··· self.Chinese = Chinese

··· self.Mathematics = Mathematics

··· self.English = English

··· def average(self):

··· return (self.Chinese + self.Mathematics + self.English)/3

···

# Jack是Student类的一个对象,Jack同学的语数英的分数分别是88,85,94

>>> Jack = Student(88, 85, 94)

# 计算Jack同学的平均分,只要直接调用average()方法

>>> Jack.average()

89.0

# 和处理Jack同学的方法类似,Lucy同学也可以作同样的处理

>>> Lucy = Student(92, 98, 80)

>>> Lucy.average()

90.0

虽然只有两名同学的时候,使用类显得更加复杂一点,但是Student类实现了对数据和算法的重用,后面不管再出现多少的同学,我们都可以很轻松地处理,这就是类的魅力所在。

类和对象有什么区别?

有的同学分不清类和对象,简单举个例子:上面的Student就是一个类,而Jack就是类的一个对象,或者叫实例,Lucy是另一个对象。所以我们不难看出:一个类可以有多个对象。从计算机存储的角度讲,类是一个概念,不占用任何存储空间,而对象则是由类所定义的数据组成的,它类似于C语言中的结构体,占用了一定的内存空间。

# Student是一个类,不占用内存空间

>>> Student

# Jack是一个对象,它所占用的内存空间是0x0000018C2C3E2358

# 这个内存空间的地址由python解释器分配的,因人而异

>>> Jack

# 函数也是需要占用内存空间的

>>> Jack.average

怎样创建一个类?

想要创建一个类,必须要了解类的一般形式。下面,我们简单看一下:

class 类名(父类):

""" 类的简介 """

def __init__(self, *args):

代码块

def 函数方法(参数):

代码块

大家不要被它的结构所吓倒,其实拆分开来也很容易理解。

首先,类的标识是class,class后面接类的名称。有的类是别的类的子类,这样的类继承了父类的所有特征。在定义的时候,只要在类名后面的小括号中加上父类的名字,就表明继承父类了。

类的名称下方,一般是类的简介。类的简介一般来说是用引号标注起来的部分。

类一般来说有__init__(self, *args)方法,它展现了类所包含的数据结构,同时也承担了类数据的初始化的工作。其中,__init__是专用的方法名称;self是类的对象实例,它也是专用的名称;*args是初始化所需要的参数。

# 直接调用Student的average()方法,会提示缺少参数self

>>> Student.average()

TypeError: average() missing 1 required positional argument: 'self'

# 添加参数self,提示self没有定义

>>> Student.average(self)

NameError: name 'self' is not defined

# 添加参数Jack,给出的是89.0的结果

>>> Student.average(Jack)

89.0

# 添加参数Lucy,给出的是89.0的结果

>>> Student.average(Lucy)

90.0

>>> Student.average(Jack) == Jack.average()

True

# 从上面看出,self是Student的某个对象的代称,self可以指代Jack,也可以指代Lucy

除了__init__()方法以外,类还可以其它方法,这些方法可以帮助我们实现特定的功能。比如:Student类中的average()方法,调用该方法可以算出语数外三门的平均分。

具备了这几个要素,我们就可以创建出一个能发挥作用的类了。

总结

类是对数据结构和算法的复用,使用类可以极大地提高编程效率

对象是类的具体化,对象占用内存空间和类不占用

创建一个类需要考虑:类的名称、父类、简介、初始化、其它方法

思考

# 尝试创建一个类来解决下面的问题:

# Reverse digits of an integer.

# Example1: x = 123, return 321

# Example2: x = -123, return -321

# 本题非聪哥原创,出自leetcode,

# 感兴趣的同学可以去这个网站看看,由很多考验水平的算法题哦 ^_^

# 原题链接:https://leetcode.com/problems/reverse-integer/#/description

扫一扫这个二维码,关注公众号:聪哥python,获取最新python3基础教程

聪哥python

python面向对象oo是什么意思_python进阶:面向对象是什么意思?相关推荐

  1. python中oo是什么意思_python中的OO

    写给自己的备忘,很浅显,可能只是句法方面的事,不涉及OO思想之类的,因为OO思想是共通的,并没有python的OO思想一说 PS 示例代码来自<python简明教程> 继承 python中 ...

  2. python多态的三种表现形式_python小结----面向对象的三大特征(封装,继承,多态)

    面向对象的三大特征: 封装,继承,多态 面向对象的编程思想核心:高类聚,低耦合–程序的设计模式范畴 封装 什么是封装: 在面向对象编程的思想中,对代码进行高度封装,封装又叫包装 封装就是指将数据或者函 ...

  3. python高阶函数看不懂_Python进阶:高阶函数的详细说明

    这篇文章讲述了Python进阶:高阶函数的详细说明有需要的朋友可以参考 函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单 ...

  4. python装饰器模式带参数_Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列)...

    Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列) 一丶带参数的装饰器 def wrapper_out(pt): def wrapper(func): ...

  5. python英译汉库模块_Python 进阶之路-翻译模块

    Python 进阶之路-翻译模块 作者:nango  阅读:1749次  来源:原创  时间:2017-07-14 17:09 Git 地址 [python 翻译模块](https://github. ...

  6. python爬取论坛付费内容_Python进阶量化交易专栏场外篇20-爬虫抓取股票论坛帖子...

    欢迎大家订阅<教你用 Python 进阶量化交易>专栏!为了能够提供给大家更轻松的学习过程,笔者在专栏内容之外已陆续推出一些手记来辅助同学们学习本专栏内容,目前推出的扩展篇链接如下: 为了 ...

  7. python 组合优化 回撤最小_Python进阶量化交易专栏场外篇23-Markowitz实现股票最优组合...

    欢迎大家订阅<教你用 Python 进阶量化交易>专栏!为了能够提供给大家更轻松的学习过程,笔者在专栏内容之外已陆续推出一些手记来辅助同学们学习本专栏内容,目前推出的扩展篇链接如下: 股票 ...

  8. CC00020.python——|HadoopPython.v20|——|Arithmetic.v20|语法:进阶面向对象.V2|

    一.面向对象 ### --- 面向对象基本概念~~~ # 面向过程: ~~~ 根据业务逻辑从上到下写代码. ~~~ # 面向对象: ~~~ 将变量与函数.属性绑定到一起,分类进行封装,每个程序只要负责 ...

  9. python程序开发的各个阶段_python基础----面向对象的程序设计(五个阶段、对小白的忠告、关于OOP常用术语)、类、对象...

    抽象指对现实世界问题和实体的本质表现,行为和特征建模,建立一个相关的子集,可以用于 绘程序结构,从而实现这种模型.抽象不仅包括这种模型的数据属性,还定义了这些数据的接口. 对某种抽象的实现就是对此数据 ...

  10. python 爬取财经新闻股票_Python进阶量化交易专栏场外篇20-爬虫抓取股票论坛帖子...

    欢迎大家订阅<教你用 Python 进阶量化交易>专栏!为了能够提供给大家更轻松的学习过程,笔者在专栏内容之外已陆续推出一些手记来辅助同学们学习本专栏内容,目前推出的扩展篇链接如下: 为了 ...

最新文章

  1. java中try,catch,finally的作用
  2. php多表数据排除,thinkphp中多表查询中防止数据重复的sql语句(必看)
  3. 剪绳子python_Python剪绳子如何实现 Python剪绳子实现代码
  4. DataScience:对严重不均衡数据集进行多种采样策略(随机过抽样、SMOTE过采样、SMOTETomek综合采样、改变样本权重等)简介、经验总结之详细攻略
  5. 【黑科技】在alv中设置字体样式
  6. batchnorm pytorch_GitHub趋势榜第一:TensorFlow+PyTorch深度学习资源大汇总
  7. android 视图覆盖,如何在Android中添加覆盖视图超过其他视图?
  8. Java调用存储过程出现Bug,sql语法错误
  9. [日推荐]『蓝轨迹外语自学中心』免费的全能外语自学工具
  10. linux系统中useradd和usermod命令参数讲解
  11. matlab竞赛论文模板,美赛数学建模比赛论文模板.doc
  12. 数据结构严蔚敏(c语言版)课后算法题答案-线性表
  13. django使用kindeditor上传图片问题
  14. Chang-Xiao Li Machine Learning 2019 Task10
  15. 【讲座】清华刘知远:自然语言理解难在哪儿?
  16. 3D图形学一:模仿草的运动 – GPU(Pixel Shader Vertex Shader)实现
  17. 大数据时代下的小公益
  18. Python多线程实现WIFI破解
  19. FireFox下Canvas使用图像合成绘制SVG的Bug
  20. vscode 取消拉去变基_开发工具之 Git 篇

热门文章

  1. 嵌入式系统开发-麦子学院(3)——Linux C初级编程1
  2. 传智博客JAVA基础第二十三天
  3. 【最后一天报名】数据科学峰会分论坛:供应链、用户增长、电商零售
  4. 狂神说SpringCloud学习笔记
  5. 电脑微信语音通话听不到对方声音或无法播放消息语音
  6. 沉睡者IT - 月赚几千的创业项目思路,抖音文案号网赚项目
  7. 计算机专业的黑板报内容,新学期黑板报文字资料参考
  8. 个体和公司以及小微企业的区别
  9. no jdk specified
  10. 支付宝生活号开发配置