程序设计的三种基本结构: 面向对象,面向过程,函数式编程
 
1,什么是面向对象编程 
 
面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。
 
2,什么是类什么是对象,又有什么关系可以说类是一个函数的集合,看看下面的代码
class 类:#类名称
def 函数1()
pass
def 函数2()
pass
obj=类() #创建一个对象,实例化的过程
 
obj.函数1()#方法
 
3,什么时候适用面向对象呢?
 
当我们想写一个机器上传文件并执行命令的脚本,我们可以用面向过程的方法,利用函数写成这个样子:
def upload():
#连接服务器
#上传文件
#关闭连接
pass
def cmd():
#连接服务器
#执行命令
#关闭连接
pass
def upload_cmd():
#连接服务器
#上传文件
#执行命令
#关闭连接
pass

也可以这样

def connect():
#连接服务器
pass
def close():
#断开连接
pass
def upload():
connect()
#上传文件
close()
pass
def cmd():
connect()
#执行命令
close()
pass
def upload_cmd():
connect()
upload()
cmd()
close()
pass

感觉好像有点繁琐,总归是处理了,那么,如果用面向对象会如何呢?

class SSH(object):
def __init__(self,host,port,pwd,username):
self.host = host
...
def connection(self):
self.connection = 和服务器创建对象()
def close(self):
#关闭
self.connection.关闭
def upload(self):
self.connection()
#使用连接上传文件
def cmd(self):
self.connection()
#使用执行命令 obj = SSH('',host,port....)
obj.connection()
obj.upload()
obj.close()

我们把公共的功能,提取出来,还可以创建属于对象的属性,其他方法可以使用,这样不是更好么?

还有一种使用场景,就是类似于模板化,实例代码如下:

class Role(object):
def __init__(self, name, role, weapon, life_value=100, money=15000):
self.name = name
self.role = role
self.weapon = weapon
self.life_value = life_value
self.money = money def shot(self):
print("%s shooting..." %self.name)
self.__heart = "Die"
print(self.__heart) def got_shot(self,):
print("%s say : ah...,I got shot..." %self.name) def buy_gun(self, gun_name):
print("%s just bought %s" %(self.name,gun_name))
self.weapon = gun_name #通过类可以改对象的属性 r1 = Role('Alex', 'police', 'AK47') #生成一个角色
r2 = Role('Jack', 'terrorist', 'B22') #生成一个角色

结论:

 面向对象不会写,也能实现和满足功能,就是比较麻烦,而面向对象简单的就能实现,但是无论我们用什么形式编程,我们都要明确记住一下原则:
 
1.写重复代码是非常不好的低级行为
2.你写的代码需要经常变更所以需要他可读性好,易扩展
3. 面向过程编程与OOP的主要区别就是 OOP 使程序更加容易扩展和易更改

下一篇文章会将面向对象的语法和特性总结:

Python面向对象学习2(面向对象的语法和特性)

 
 

Python面向对象学习 1 (什么是面向对象,面向对象的应用场景,待更新)的更多相关文章

  1. Python学习系列(八)( 面向对象基础)

     Python学习系列(八)( 面向对象基础) Python学习系列(七)( 数据库编程) 一,面向对象 1,域:属于一个对象或类的变量.有两种类型,即实例变量—属于每个实例/类的对象:类变量—属于类 ...

  2. python语法学习面向对象之继承

    python语法学习面向对象之继承 转载自:http://www.cnblogs.com/Joans/archive/2012/11/09/2757368.html 只要涉及到面向对象,”类“是必须出 ...

  3. 转 python语法学习面向对象之继承

    传送门 python语法学习面向对象之继承 只要涉及到面向对象,”类“是必须出现的一个代名词. 类和对象是面向对象编程的两个主要方面.类创建一个新类型,而对象是这个类的实例. 类的一些概念: 包括初始 ...

  4. python学习-第四天补充-面向对象

    python学习-第四天补充-面向对象 python 私有 --name mangling(名字修改.名字) 在命名时,通过使用两个下划线作为开头,可以使得这个变量或者函数编程私有的,但是这个其实的p ...

  5. (转)Python之路,Day6 - 面向对象学习

    本节内容:   面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法.     引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战> ...

  6. Python之路,Day6 - 面向对象学习

    本节内容:   面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏 ...

  7. python学习笔记-(十)面向对象基础

    面向对象相关知识简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定义 ...

  8. 转:Python之路,Day6 - 面向对象学习

    这篇文章写的不错,转来收了 转自:http://www.cnblogs.com/alex3714/articles/5188179.html   本节内容:   面向对象编程介绍 为什么要用面向对象进 ...

  9. 十一Python之路,Day6 - 面向对象学习

      本节内容:   面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法.     引子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战& ...

随机推荐

  1. mysql(六)索引的数据结构

    先做抽象定义如下: 定义一条数据记录为一个二元组[key, data],key为记录的键值,对于不同的数据记录,key是互不相同的:data为数据记录除key外的数据. B-tree的特点: d为大于 ...

  2. BZOJ 1190 梦幻岛宝珠(分组01背包)

    跑了7000ms... 这是个体积和价值都超大的背包.但是体积保证为a*2^b的(a<=10,b<=30)形式.且n<=100. 于是可以想到按b来分组.这样的话每组最多为a*n*2 ...

  3. 【明哥报错簿】之【解决eclipse项目小红叉】

    解决方案: 0.如果是jdk版本不一致,直接右击项目名称,选择maven里面的update project.原因一般是maven的pom.xml里面设置的编译插件org.apache.maven.pl ...

  4. 洛谷 P1344 [USACO4.4]追查坏牛奶Pollutant Control

    题目描述 你第一天接手三鹿牛奶公司就发生了一件倒霉的事情:公司不小心发送了一批有三聚氰胺的牛奶.很不幸,你发现这件事的时候,有三聚氰胺的牛奶已经进入了送货网.这个送货网很大,而且关系复杂.你知道这批牛 ...

  5. 【刷题】BZOJ 1211 [HNOI2004]树的计数

    Description 一个有n个结点的树,设它的结点分别为v1, v2, -, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵.给定n,d1, d2, -, dn,编程需要 ...

  6. CSS3制作3D水晶糖果按钮

    本人仿照20个漂亮 CSS3 按钮效果及优秀的制作教程中的BonBon(Candy)Button实现了其棒棒糖果按钮,如下图所示: 在线演示地址见here. 使用完全使用CSS实现,无需JS.源码如下 ...

  7. Hive(四)hive函数与hive shell

    一.hive函数 1.hive内置函数 (1)内容较多,见< Hive 官方文档>            https://cwiki.apache.org/confluence/displ ...

  8. js 时间戳 和 格式化时间转化

    function timestampToTime(timestamp) { var date = new Date(timestamp * 1000);//时间戳为10位需*1000,时间戳为13位的 ...

  9. DINSTINCT

    DISTINCT是对结果集进行去重,有三点需要注意. 1.在大多数情况下(两者后面所跟的字段相同时),DISTINCT跟group by是等效的,此时DISTINCT可以看作group by的一个特例 ...

  10. nova-api源码分析(WSGI server的创建及启动)

    源码版本:H版 一.前奏 nova api本身作为一个WSGI服务器,对外提供HTTP请求服务,对内调用nova的其他模块响应相应的HTTP请求.分为两大部分,一是服务器本身的启动与运行,一是加载的a ...