python之旅六【第七篇】面向对象

面向对象三大特性

  • 面向过程:根据业务逻辑从上到下写垒代码
  • 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
  • 面向对象:对函数进行分类和封装,让开发“更快更好更强...

面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。

  类就是一个模板,模板里可以包含多个函数,函数里实现一些功能

  对象则是根据模板创建的实例,通过实例对象可以执行类中的函数

一、什么是类&对象

类:可以理解为他是一个模板,比如人们在说“人”这个名词的时候,没人知道这个“人”具体是指那个人!

对象:对象是一个实际的物体,他有自己的属性和特征、行为的,比如alex和eric,当说到这两个人的时候就会想到,alex很猥琐、eric很闷骚他们的特征、动作啊都能具体的显示出来!

二特性

封装
继承
多态(很少有用)

创建类和对象

 类就是一个模板,模板里可以包含多个函数,函数里实现一些功能

 对象则是根据模板创建的实例,通过实例对象可以执

行类中的函数

  • class是关键字,表示类
  • 创建对象,类名称后加括号即可
  • 类中的函数第一个参数必须是self
  •  类中定义的函数叫做 “方法”

封装

封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。

所以,在使用面向对象的封装特性时,需要:

  • 将内容封装到某处
  • 从某处调用被封装的内容

第一步:将内容封装到某处

self 是一个形式参数,当执行 obj1 = Foo(‘wupeiqi‘, 18 ) 时,self 等于 obj1

当执行 obj2 = Foo(‘alex‘, 78 ) 时,self 等于 obj2

所以,内容其实被封装到了对象 obj1 和 obj2 中,每个对象中都有 name 和 age 属性,在内存里类似于下图来保存。

第二步:从某处调用被封装的内容

调用被封装的内容时,有两种情况:

  • 通过对象直接调用
  • 通过self间接调用

1、通过对象直接调用被封装的内容

上图展示了对象 obj1 和 obj2 在内存中保存的方式,根据保存格式可以如此调用被封装的内容:对象.属性名

 1 class Foo:
 2
 3     def __init__(self, name, age):
 4         self.name = name
 5         self.age = age
 6
 7 obj1 = Foo(‘wupeiqi‘, 18)
 8 print obj1.name    # 直接调用obj1对象的name属性
 9 print obj1.age     # 直接调用obj1对象的age属性
10
11 obj2 = Foo(‘alex‘, 73)
12 print obj2.name    # 直接调用obj2对象的name属性
13 print obj2.age     # 直接调用obj2对象的age属性

2、通过self间接调用被封装的内容

执行类中的方法时,需要通过self间接调用被封装的内容

 1 class Foo:
 2
 3     def __init__(self, name, age):
 4         self.name = name
 5         self.age = age
 6
 7     def detail(self):
 8         print self.name
 9         print self.age
10
11 obj1 = Foo(‘wupeiqi‘, 18)
12 obj1.detail()  # Python默认会将obj1传给self参数,即:obj1.detail(obj1),所以,此时方法内部的 self = obj1,即:self.name 是 wupeiqi ;self.age 是 18
13
14 obj2 = Foo(‘alex‘, 73)
15 obj2.detail()  # Python默认会将obj2传给self参数,即:obj1.detail(obj2),所以,此时方法内部的 self = obj2,即:self.name 是 alex ; self.age 是 78

综上所述,对于面向对象的封装来说,其实就是使用构造方法将内容封装到 对象 中,然后通过对象直接或者self间接获取被封装的内容。

调用过程

继承

时间: 2024-11-15 00:28:44

python之旅六【第七篇】面向对象的相关文章

【Python之旅】第七篇(一):再谈Python多线程

主要是再进一步加深Python中关于多线程相关函数join()的理解以解多线程的执行过程.这里通过下面的例子来作进一步的说明. 1.多线程与主程序代码的执行顺序关系 给出下面程序代码: #!/usr/bin/env python import threading import time def sayHi(n): time.sleep(1) print 'Hi this is thread %s' %n thread_list = []    #用来存放多线程执行返回的函数入口,因此这里存放的是

【Python之旅】第七篇(二):Redis使用基础

由于学习开发监控软件的需要,因此需要使用到Redis,这里简单介绍. 1.安装 可以查看这里的文章:http://www.linuxidc.com/Linux/2014-05/101544.htm 2.启动 由于采用的是源码安装的方式,所以直接进入src目录,启动redis-server: [email protected]:/mnt/hgfs/Python/day7/redis-2.8.9/src$ ./redis-server  [12681] 16 Oct 00:06:52.964 # W

Python之路【第七篇】:线程、进程和协程

Python之路[第七篇]:线程.进程和协程 Python线程 Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #!/usr/bin/env python # -*- coding:utf-8 -*- import threading import time   def show(arg):     time.sleep(1)     print 'thread'+str(arg)   for i in

【Python之路】第七篇--Python基础之面向对象及相关

面向对象基础 基础内容介绍详见一下两篇博文: 面向对象初级篇 面向对象进阶篇 其他相关

python之旅六【第七篇】面向对象之类成员

面向对象的类成员 相关知识点 一  字段 字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同, 普通字段属于对象 静态字段属于类

Python之路【第七篇】:Python基础(23)——面向对象初级

一.面向对象基础 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定义在类中且在函数体之外.类变量通常不作为实例变量使用. 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据. 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写. 实例变量:定义在方法中的变量,只作用于当前实例的类.

【Python之旅】第四篇(三):Python面向对象编程详解

终于是来到了Python的面向对象编程,以前是没有接触过其它的面向对象编程的语言,因此学习这一部分是相当带劲的,这里也总结一下. 1.面向对象编程的相关名词及解释 世界万物,皆可分类,一切皆为对象. 所谓的面向对象编程,指的是一种编程的思想,通过对具体代码实现过程(面向过程编程)的不断抽象,以形成一个个的类别,以提高我们进行大型程序编写的效率(面向对象的具体实现需要面向过程,大型程序也可以用面向过程来编写,只是比较麻烦).对于面向对象编程的相关名词和解释如下: 对象 :类的实体\一个叫Rain的

python之旅六【第六篇】模块

json和pickle 用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进行转换 json模块提供了四个功能:dumps.dump.loads.loadpickle模块提供了四个功能:dumps.dump.loads.load json dumps把数据类型转换成字符串 dump把数据类型转换成字符串并存储在文件中  loads把字符串转换成数据类型  load把文件打开从字符串转换成数据类型

【python游戏编程之旅】第七篇---pygame中的冲突检测技术

本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 上一个博客我们一起学习了pygame中的Sprite模块和如何加载动画:http://www.cnblogs.com/msxh/p/5013555.html 这次我们来一起学习pygame中的冲突检测技术. pygame支持非常多的冲突检测技术,我们来一一的看一下他们是如何使用的: 一.精灵与精灵之间的冲突检测 1.两个精灵之间的矩形检测 在只有两个精灵的时候我们可以使用pygame.sprite.col