1.面向对象概述

面向过程:根据业务逻辑从上到下写垒代码
  函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
  面向对象:对函数进行分类和封装,让开发“更快更好更强...”
  面向过程编程最易被初学者接受,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,即:将之前实现的代码块复制到现需功能处。

2.面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)

(1)面向对象编程主要有两个主题就是类和实例。

类与实例相互关联着:类是对象的定义,而实例是’真正的实物‘,它存放了类中所定义的对象的具体信息。

(2)创建类和对象

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

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

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

 #创建类
class Foo: #class关键字,表示要创建类;Foo 类名称
def __init__(self,name):
self.name=name
#创建类中的函数
def Bar(self):#self为特殊函数,必填
#do smoethong
#根据类Foo创建对象obj
obj=Foo()
obj.Bar() #执行Bar方法
例子: 
1 class Role(object):#object顶级位,如果是继承类则object改为被继承类名称
ac=None #存在类的属性,公共的
members = 0 #类变量,类属性
def __init__(self,name,role,weapon,life_value):#初始化函数
#self 谁调用这个类谁就是这个self,调用这个类的是实例,实例本身
self.name = name
self.role = role #实例属性,实例变量,成员变量
self.weapon = weapon
self.life_val = life_value
Role.members += 1
self.buy_weapon()
def buy_weapon(self,weapon):#类的方法
print('%s is buy [%s]'%(self.name,weapon))
self.weapon = weapon
#role 的实例
#把一个抽象的类变成一个具体的对象的过程,叫实例化
p1=Role("Sanjiang",'Police','B10',90)
#Role(p1,"Sanjiang",'Police','B10',90)相当于上面执行的步骤
t1=Role("ChunYun",'Terrorist','B11',100) p1.buy_weapon("AK47") #Role.buy_weapon(p1,'AK47')
t1.buy_weapon("B51") #调用类中的方法 Role.ac = 'Japan Brand'
print(Role.weapon) #此处会报错,
p1.ac = "China Brand"
t1.ac = "US Brand"
print('p1:',p1.weapon,p1.ac)
print('t2:',t2.ac)#先访问类变量,如果赋值则不访问类变量,直接将赋值写入内存

3.面向对象的三大特效

面向对象的三大特性是指:封装、继承和多态。

(1)封装

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

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

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

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

 #创建类
class Foo:
def __init__(self,name,age):#称为构造方法,根据类创建对象时自动执行
self.name = name
self.age =age
#根据类Foo创建对象
#自动执行Foo类的__inint__方法
obj1=Foo('liu',22)#将liu和22分别封装到obj1 self的name和age属性里 #根据类Foo创建对象
#自动执行Foo类的__inint__方法
obj2=Foo('qq',23)

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

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

所以,内容其实被封装到了对象 obj1 和 obj2 中,每个对象中都有 name 和 age 属性。

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

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

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

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

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

 class Foo:

     def __init__(self, name, age):
self.name = name
self.age = age obj1 = Foo('liu', 22)
print obj1.name # 直接调用obj1对象的name属性
print obj1.age # 直接调用obj1对象的age属性

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

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

 class Foo: 
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def detail(self):
        print self.name
        print self.age
  
obj1 = Foo('liu', 22)
obj1.detail()  # Python默认会将obj1传给self参数,即:obj1.detail(obj1),所以,此时方法内部的 self = obj1,即:self.name 是 liu ;self.age 是 22
  
obj2 = Foo('qq', 23)
obj2.detail()  # Python默认会将obj2传给self参数,即:obj1.detail(obj2),所以,此时方法内部的 self = obj2,即:self.name 是 qq ; self.age 是23

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

(2)继承

继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容,继承的过程,就是从一般到特殊的过程。

通过继承创建的新类称为“子类”或“派生类”。

被继承的类称为“基类”、“父类”或“超类”。

对于面向对象的继承来说,其实就是将多个类共有的方法提取到父类中,子类仅需继承父类而不必一一实现每个方法。

 class  父类:
def 父类中的方法(self):
pass class 子类(父类):#子类继承父类,子类拥有父类的所有方法
pass
zi = 子类() #创建子类对象
zi.父类中的方法() #执行从父类中继承的方法

Python学习之路--面向对象的更多相关文章

  1. python学习之路------你想要的都在这里了

    python学习之路------你想要的都在这里了 (根据自己的学习进度后期不断更新哟!!!) 一.python基础 1.python基础--python基本知识.七大数据类型等 2.python基础 ...

  2. python学习之路-day2-pyth基础2

    一.        模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,第三方库存放位置:site-packages sys模块简介 导入模块 import sys 3 sys模 ...

  3. Python学习之路-Day2-Python基础3

    Python学习之路第三天 学习内容: 1.文件操作 2.字符转编码操作 3.函数介绍 4.递归 5.函数式编程 1.文件操作 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个 ...

  4. Python学习之路-Day2-Python基础2

    Python学习之路第二天 学习内容: 1.模块初识 2.pyc是什么 3.python数据类型 4.数据运算 5.bytes/str之别 6.列表 7.元组 8.字典 9.字符串常用操作 1.模块初 ...

  5. Python学习之路-Day1-Python基础

    学习python的过程: 在茫茫的编程语言中我选择了python,因为感觉python很强大,能用到很多领域.我自己也学过一些编程语言,比如:C,java,php,html,css等.但是我感觉自己都 ...

  6. python学习之路网络编程篇(第四篇)

    python学习之路网络编程篇(第四篇) 内容待补充

  7. Python学习之路【第一篇】-Python简介和基础入门

    1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...

  8. python 学习之路开始了

    python 学习之路开始了.....记录点点滴滴....

  9. python学习之路,2018.8.9

    python学习之路,2018.8.9, 学习是一个长期坚持的过程,加油吧,少年!

随机推荐

  1. sizeof(结构体) = ?

    关于结构体大小怎样计算的文章,我想网上一搜到处都有人总结,本人之所以在此基础上还要发表这样的文章是想用最简单的计算方法来总结前人给出的结论,以致我们在以后在对结构体相关编程中不会陷入字节对齐的陷阱中. ...

  2. 通过XmlHttpRequest实现带进度条异步下载文件

    本博文源自技术群的讨论,因为网上找不到实现这样效果的的代码,而我说没问题,可以实现,因此有人质疑我是否能做到,呵呵,现将我实现代码贴出如下,希望有兴趣的同学可以继续完善: 本代码仅做技术展现,请勿探讨 ...

  3. js Function.call

      提到上述的概念之前,首先想说说javascript中函数的隐含参数:arguments Arguments 该对象代表正在执行的函数和调用它的函数的参数. [function.]arguments ...

  4. JVM内存区域介绍

    学习JVM第一个要了解的就是JVM的内存区域. Java虚拟机在运行时会从操作系统内存中划分一部分出来作为JVM内存,而JVM内存又划分为以下几个区域: 大体上可以分为两种: 线程共享数据区 该类型的 ...

  5. python 协程

    协程 协程就是一种用户态内的上下文切换技术. 1.使用gevent实现协程, gevent.spawn()调用函数,  gevent.sleep(1) 模拟阻塞,实现切换. import gevent ...

  6. SQL图形化操作设置级联更新和删除

    SQL级联操作设置   对SQL数据库的表,进行级联操作(如级联更新及删除),首先需要设置表的主外键关系,有两种方法:   第一种:   1. 选择你要进行操作的数据库   2. 为你要创建关系的两个 ...

  7. OOP之C#设计及其UML(反向工程)

    现在总结一下C#类关键字(virtual.abstract.override.new.sealed)的使用(以C#代码体现),并再次熟悉一下OOP思想,使用UML工具EA(Enterprise Arc ...

  8. flask-admin章节二:wtforms的使用以及在数据库场景中使用QuerySelectField代替SelectField

    概述 flask admin可以支持自定义视图,对于涉及到比较复杂的视图可以选择继承flask_admin.BaseView来定义自己期待的结构. 自定义的视图的每个函数可以使用flask_admin ...

  9. [转]Snappy压缩库安装和使用之一

    Snappy压缩库安装和使用之一 原文地址:http://blog.csdn.net/luo6620378xu/article/details/8521223 近日需要在毕业设计中引入一个压缩库,要求 ...

  10. 总结最近移动端遇到的坑(auto-size + zepto)

    问题一:移动端页面双击会放大,图片时大时正常,布局偶尔很丑..刷新多遍又乜有问题 解决:所有图片设置宽高100%,最外面的html,给个 <meta name="viewport&qu ...