码迷,mamicode.com
首页 > 编程语言 > 详细

python运维开发(七)----面向对象(上)

时间:2016-06-21 01:06:11      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:

内容目录:

  • 面向对象应用场景
  • 类和对象的创建
  • 类中的__init__构造方法
  • self理解
  • 面向对象的三大特性:封装、继承、多态

概述

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

 面向过程编程最易被初学者接受,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,即:将之前实现的代码块复制到现需功能处。

 面向对象应用场景

  当某一些函数具有相同参数时,可以使用面向对象的方式,将参数值一次性的封装到对象,以后去对象中取值即可

类和对象的创建

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

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

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

技术分享

  • class是关键字,表示类
  • 创建对象,类名称后加括号即可
  • 类中的函数第一个参数必须是self
  • 类中定义的函数叫做 “方法“
# 创建类
class SQLHELPER:
    def fetch(self,sql):
        print(obj.hhost)
        print(obj.username)
        print(obj.passwd)
        print(sql)
    def create(self,sql):
        pass
    def remove(self,sql):
        pass
    def modify(self,sql):
        pass
# 根据类SQLHELPER创建对象obj
obj = SQLHELPER()
obj.hhost = ‘c1.salt.com‘ #相同的参数封装在对象中
obj.username = ‘root‘
obj.passwd = ‘123‘
obj.fetch(‘select * from A;‘)#执行fetch方法 

 类中的__init__构造方法

在类中有__init__的构造方法自动执行,我们通常可以将公共的参数写入到init方法中

class Foo:
    def __init__(self):
        print(‘自动被执行‘)
        self.hhost = ‘c1.salt.com‘ #将hhost变量写入到init方法中
        self.username = ‘root‘ #将username 变量写入到init方法中
        self.pwd= ‘123‘ #将pwd变量写入到init方法中

obj = Foo()

#输出:
自动被执行

应用

class Foo:
    def __init__(self,a1,a2,a3):  #通过传参来写init方法
        print(‘自动被执行‘)
        self.hhost = a1
        self.username = a2
        self.root = a3
        print(a1,a2,a3)
    def fetch(self):
        pass
    def remove(self):
        pass
    def modify(self):
        pass
    def create(self):
        pass
obj1 = Foo(‘c1.salt.com‘,‘root1‘,‘123‘)
obj2 = Foo(‘c2.salt.com‘,‘root2‘,‘123‘)

self的理解  

  self是python自动会给传值的参数

  哪个对象执行方法,self就是谁 

obj1.fetch(‘select * ....‘) self = obj1
obj2.fetch(‘select * ....‘) self = obj2

面向对象的三大特性 

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

1、封装

封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。所以,在使用面向对象的封装特性时,需要如下的操作:

  • 将内容封装到某处

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

可以从下面的图中事例来理解封装

技术分享

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

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

所以,内容其实被封装到了对象 obj1 和 obj2 中,每个对象中都封装了 name 和 age ,之前说的“内容封装到某处”其在内容里类似于下图来保存。

技术分享

练习:

1、创建三个游戏人物,分别是:

  • 苍井井,女,18,初始战斗力1000

  • 东尼木木,男,20,初始战斗力1800

  • 波多多,女,19,初始战斗力2500

2、游戏场景,分别:

  • 草丛战斗,消耗200战斗力

  • 自我修炼,增长100战斗力

  • 多人游戏,消耗500战斗力

# -*- coding:utf-8 -*-
 
# #####################  定义实现功能的类  #####################
 
class Person:
 
    def __init__(self, na, gen, age, fig):
        self.name = na
        self.gender = gen
        self.age = age
        self.fight =fig
 
    def grassland(self):
        """注释:草丛战斗,消耗200战斗力"""
 
        self.fight = self.fight - 200
 
    def practice(self):
        """注释:自我修炼,增长100战斗力"""
         
        self.fight = self.fight + 200
 
    def incest(self):
        """注释:多人游戏,消耗500战斗力"""
         
        self.fight = self.fight - 500
 
    def detail(self):
        """注释:当前对象的详细情况"""
 
        temp = "姓名:%s ; 性别:%s ; 年龄:%s ; 战斗力:%s"  % (self.name, self.gender, self.age, self.fight)
        print temp
 
         
# #####################  开始游戏  #####################
 
cang = Person(‘苍井井‘, ‘女‘, 18, 1000)    # 创建苍井井角色
dong = Person(‘东尼木木‘, ‘男‘, 20, 1800)  # 创建东尼木木角色
bo = Person(‘波多多‘, ‘女‘, 19, 2500)      # 创建波多多角色
 
cang.incest() #苍井空参加一次多人游戏
dong.practice()#东尼木木自我修炼了一次
bo.grassland() #波多多参加一次草丛战斗
 
 
#输出当前所有人的详细情况
cang.detail()
dong.detail()
bo.detail()
 
 
cang.incest() #苍井空又参加一次多人游戏
dong.incest() #东尼木木也参加了一个多人游戏
bo.practice() #波多多自我修炼了一次
 
#输出当前所有人的详细情况
cang.detail()
dong.detail()
bo.detail()

 

2、继承

继承,面向对象中的继承和现实生活中的继承相同,即:子可以继承父的内容。

如果我们要分别为猫和狗创建一个类,那么就需要为 猫 和 狗 实现他们所有的功能,如下所示:

普通继承

多重继承

技术分享

 

技术分享

 

 

参考url:http://www.cnblogs.com/wupeiqi/p/4493506.html

python运维开发(七)----面向对象(上)

标签:

原文地址:http://www.cnblogs.com/Jabe/p/5599104.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!