如何理解python面向对象编程


Posted in Python onJune 01, 2020

类是面向对象程序设计的一部分。面向对象程序设计或者简称为 OOP 致力于创建可重用代码块称之为类。当你想在你的程序中使用类时,你会从类中创建一个对象,这也是面向对象一词的由来。Python 并不总是面向对象的,但是你会在你的项目中用到对象。为了理解类,你需要理解面向对象的一些基础术语。

常用术语

class:类。类是代码块的主体,其中定义了建立的模型的属性和行为。这个模型可以来自于真实世界,也可以是虚拟游戏等。

attribute:属性。是一系列信息的集合。在类中,一个属性通常是一个变量。

behavior:行为。行为是定义在类中,组成方法的部分。也即是定义在类中函数的一部分。

method:方法。类中的函数,由 behavior 组成。

object:对象。对象是类的实例。一个对象中包含所有类中属性的值。你可以为一个类创建任意数量的对象。

近距离观察 Rocket 类

我们已经了解到一些类的基本术语,让我们回头再分析一下上节提到的 Rocket 类。

__init__() 方法

定义一个初始代码块,如下所示:

class Rocket():
  # Rocket simulates a rocket ship for a game,
  # or a physics simulation.
  
  def __init__(self):
    # Each rocket has an (x,y) position.
    self.x = 0
    self.y = 0

第一行展示了类是如何创建的。关键字 class 告诉 Python 准备定义一个类。类名的命名规则和变量的相同,但是 Python 中有一个约定好的规则,类名必须是驼峰式的。也即每个单词的开头必须是大写的,不允许下划线的出现。类名后紧跟一对圆括号,目前为止圆括号里都是空的,接下来的学习中,其中可能会包含一个类。这个类是新类基于的类。

前后都有两个下划线的函数是内置在 Python 中的有特殊用途的函数。__init__() 函数就是一个特殊的函数。当创建一个类的对象时,它会自动执行。我们可以称之为初始化函数,在对象使用之前初始化一些必要的属性。在这个例子中,__init__() 函数初始化了 x 和 y 属性。

关键字 self 可能会有些难以理解。单词 "self" 指向当前的对象。当你创建一个类时,它可以访问到类中的任意指定属性。基本上,类中所有的函数都需要 self 对象作为第一个参数,因此它们就可以访问类中的属性。

现在,让我们看看类中的方法吧!

一个简单的方法

下述代码在 Rocket 类中定义了一个方法。

class Rocket():
  # Rocket simulates a rocket ship for a game,
  # or a physics simulation.
  
  def __init__(self):
    # Each rocket has an (x,y) position.
    self.x = 0
    self.y = 0
    
  def move_up(self):
    # Increment the y-position of the rocket.
    self.y += 1

方法就是类中的函数。因此你可以在方法中做任何函数能做的事。

默认情况下,每个函数都需要接受一个参数:self 。它是对调用这个方法的对象的引用。self 参数能让你访问到调用对象的属性。在这个例子中,self 用来访问 Rocket 对象的 y 属性。这个方法被调用一次,对象的 y 属性就增加1。为了更近一步了解方法的运行过程,仔细阅读下述代码,并观察它们的输出。

class Rocket():
  # Rocket simulates a rocket ship for a game,
  # or a physics simulation.
  
  def __init__(self):
    # Each rocket has an (x,y) position.
    self.x = 0
    self.y = 0
    
  def move_up(self):
    # Increment the y-position of the rocket.
    self.y += 1

# Create a Rocket object, and have it start to move up.
my_rocket = Rocket()
print("Rocket altitude:", my_rocket.y)

my_rocket.move_up()
print("Rocket altitude:", my_rocket.y)

创建多个对象

面向对象编程一个重要目标是创建可重用代码。一旦你写好了类,就能创建任意数量的对象。通常,类被放进一个单独的文件中,在需要的时候导入程序中。因此你可以创建一个类库,在不同的程序中重复使用这些类。

在一个类上创建多个对象,示例如下:

class Rocket():
     # Rocket simulates a rocket ship for a game,# Rocket 
  # or a physics simulation.
  
  def __init__(self):
    # Each rocket has an (x,y) position.
    self.x = 0
    self.y = 0
    
  def move_up(self):
    # Increment the y-position of the rocket.
    self.y += 1
    
# Create a fleet of 5 rockets, and store them in a list.
my_rockets = []
for x in range(0,5):
  new_rocket = Rocket()
  my_rockets.append(new_rocket)

# Show that each rocket is a separate object.
for rocket in my_rockets:
  print(rocket)

内容扩展:

初识类和对象

python中一切皆为对象,类型的本质就是类,所以,不管你信不信,你已经使用了很长时间的类了

>>> dict #类型dict就是类dict
<class 'dict'>
>>> d=dict(name='eva') #实例化
>>> d.pop('name') #向d发一条消息,执行d的方法pop
'eva'

从上面的例子来看,字典就是一类数据结构,我一说字典你就知道是那个用{}表示,里面由k-v键值对的东西,它还具有一些增删改查的方法。但是我一说字典你能知道字典里具体存了哪些内容么?不能,所以我们说对于一个类来说,它具有相同的特征属性和方法。

而具体的{'name':'eva'}这个字典,它是一个字典,可以使用字典的所有方法,并且里面有了具体的值,它就是字典的一个对象。对象就是已经实实在在存在的某一个具体的个体。

再举一个其他的例子,通俗一点,比如你现在有一个动物园,你想描述这个动物园,那么动物园里的每一种动物就是一个类,老虎、天鹅、鳄鱼、熊。他们都有相同的属性,比如身高体重出生时间和品种,还有各种动作,比如鳄鱼会游泳,天鹅会飞,老虎会跑,熊会吃。

但是这些老虎熊啥的都不是具体的某一只,而是一类动物。虽然他们都有身高体重,但是你却没有办法确定这个值是多少。如果这个时候给你一只具体的老虎,而你还没死,那你就能给他量量身高称称体重,这些数值是不是就变成具体的了?那么具体的这一只老虎就是一个具体的实例,也是一个对象。不止这一只,其实每一只具体的老虎都有自己的身高体重,那么每一只老虎都是老虎类的一个对象。

到此这篇关于如何理解python面向对象编程的文章就介绍到这了,更多相关python面向对象编程详解内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
简单介绍Python中的struct模块
Apr 28 Python
python实现带声音的摩斯码翻译实现方法
May 20 Python
探究python中open函数的使用
Mar 01 Python
浅谈python中scipy.misc.logsumexp函数的运用场景
Jun 23 Python
python实现Flappy Bird源码
Dec 24 Python
Python GUI编程完整示例
Apr 04 Python
对python 中re.sub,replace(),strip()的区别详解
Jul 22 Python
基于Django ORM、一对一、一对多、多对多的全面讲解
Jul 26 Python
Python 面向对象之封装、继承、多态操作实例分析
Nov 21 Python
利用pytorch实现对CIFAR-10数据集的分类
Jan 14 Python
Anaconda的安装与虚拟环境建立
Nov 18 Python
Python爬虫制作翻译程序的示例代码
Feb 22 Python
Python CSS选择器爬取京东网商品信息过程解析
Jun 01 #Python
matlab、python中矩阵的互相导入导出方式
Jun 01 #Python
如何理解Python中的变量
Jun 01 #Python
pycharm实现print输出保存到txt文件
Jun 01 #Python
Python如何爬取qq音乐歌词到本地
Jun 01 #Python
pycharm sciview的图片另存为操作
Jun 01 #Python
Python利用Xpath选择器爬取京东网商品信息
Jun 01 #Python
You might like
怎样去阅读一份php源代码
2009/08/21 PHP
无JS,完全php面向过程数据分页实现代码
2012/08/27 PHP
php文件类型MIME对照表(比较全)
2016/10/07 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
2017/08/07 PHP
把input初始值不写value的具体实现方法
2013/07/04 Javascript
JS 两个字符串时间的天数差计算
2013/08/25 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
JavaScript动态修改弹出窗口大小的方法
2015/04/06 Javascript
js拼接html字符串的注意事项
2016/10/13 Javascript
Json对象和字符串互相转换json数据拼接和JSON使用方式详细介绍(小结)
2016/10/25 Javascript
用原生JS实现简单的多选框功能
2017/06/12 Javascript
JavaScript实现二维坐标点排序效果
2017/07/18 Javascript
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
在vue中使用公共过滤器filter的方法
2018/06/26 Javascript
Bootstrap-table使用footerFormatter做统计列功能
2018/09/07 Javascript
基于vue v-for 多层循环嵌套获取行数的方法
2018/09/26 Javascript
Vue注册组件命名时不能用大写的原因浅析
2019/04/25 Javascript
redux.js详解及基本使用
2019/05/24 Javascript
JSON Web Tokens的实现原理
2017/04/02 Python
Python贪吃蛇游戏编写代码
2020/10/26 Python
python3爬取淘宝信息代码分析
2018/02/10 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
Python程序包的构建和发布过程示例详解
2019/06/09 Python
Python实用库 PrettyTable 学习笔记
2019/08/06 Python
Python类中的魔法方法之 __slots__原理解析
2019/08/26 Python
Python内建序列通用操作6种实现方法
2020/03/26 Python
html5唤起app的方法
2017/11/30 HTML / CSS
宝拉珍选澳大利亚官方购物网站:Paula’s Choice澳大利亚
2016/09/13 全球购物
雷朋巴西官方商店:Ray-Ban Brasil
2020/07/21 全球购物
Discard Protocol抛弃协议的作用是什么
2015/10/10 面试题
升职演讲稿范文
2014/05/23 职场文书
党的群众路线教育实践活动对照检查材料范文
2014/09/24 职场文书
婚前保证书范文
2015/02/28 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
合理化建议书范文
2015/09/14 职场文书
经典人生语录分享:不畏将来,不念过去,笑对当下
2019/12/12 职场文书