zoukankan      html  css  js  c++  java
  • python运维开发之第六天

    Python面向对象

    python从设计之初就已经是一门面向对象的语言,在python中创建一个类和对象很容易。

    面向对象简介:类(class),类变量,object(基类),实例变量,构造函数,封装,继承,多态,语法属性,析构函数,私有方法,私有属性。

    编程范式:面向过程,面向对象,函数式编程

    面向对象编程(oop编程):是利用“类”和“对象”来创建各种模型来描述现实世界事物

    一、面向对象的介绍:

      世界万物,皆可分类;世界万物,皆为对象。

      只要是对象,就肯定属于某种品类;只要是对象,肯定就有属性。

      使用面向对象的原因:可使程序的维护和扩展变得更简单,提高开发效率。

    二、class(类)

    定义:对一类具有相同属性的对象的抽象

    class School(object):
      n = 123 def __init__(self,name,addr): self.name
    =name self.addr =addr self.students = [] self.straffs = [] def enroll(self,stu_obj): print("为学员%s 办理注册手续"%stu_obj.name) def hire(self,straff_obj): print("雇佣新员工%s"% straff_obj.name)

      1、类变量:上文中n变量是一个类变量,它的值将在这个类的所有实例之间共享,你可以在内部类或外部类使用。

      2、构造函数: def __init__(self,name,addr):

      作用:在实例化时做一些类的初始化的工作

      3、实例变量:self.name = name ,其作用域就是实例本身,

      4、方法功能:def enroll(self,stu_obj): #类的方法功能(动态属性)

      5、创建实例对象:

      s1 = school("oldboy","沙河")

    三、类变量与实例变量

      如果类变量是实例变量同名,调用时,找实例变量。

      类变量的用途:实例共用的属性,节省开销。

    class Role:
        n = 123
        def __init__(self,name):
            self.name = name
    
    r1 = Role("jack")
    r2 = Role("tom")
    print("r1:%s
    r2:%s"%(r1.n,r2.n))
    
    print("#".center(50,"#"))
    print("改变r1.n")
    r1.n = "改类变量"
    print("r1:%s
    r2:%s"%(r1.n,r2.n))
    
    print("#".center(50,"#"))
    print("删除r1.n")
    del(r1.n)
    print("r1:%s
    r2:%s"%(r1.n,r2.n))
    View Code
    r1:123
    r2:123
    ##################################################
    改变r1.n
    r1:改类变量
    r2:123
    ##################################################
    删除r1.n
    r1:123
    r2:123
    执行结果

    四、析构函数 def __del__(self):

      在实例释放、销毁时,自动执行的,通常用于做一些收尾工作,如关闭一些数据库连接,关闭打开临时文件。  

    class Role:
        n = 123    #类变量,
        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 #私有属性,就是life_value 前加"__"
            self.money = money
        def __del__(self):
            '''
            析构函数,实例释放,销毁时自动执行,通常用于做一些收尾的工作,
            如关闭一些数据库连接,关闭打开临时文件
            :return:
            '''
            print("%s 彻底死了"% self.name)
    
        def shot(self):
            print('%s shot'% self.name)
    
        def got_shot(self):
            self.__life_value -=50
            print('%s is got_shot' % self.name)
    
        def show_status(self):
            print("name:%s,role:%s,life_value:%s"%(self.name,self.role,self.__life_value))
    r1 = Role('cjk','torrerist','ak47')
    r2 = Role('xzmly','police','m43')
    r1.got_shot()
    r1.show_status()
    del r1
    r2.got_shot()
    执行结果:
    cjk is got_shot name:cjk,role:torrerist,life_value:50 cjk 彻底死了 xzmly is got_shot xzmly 彻底死了

    五、私有方法,私有属性

    私有属性:__private_attrs:两个下划线开头,声明该属性为私有属性,不能在类外部被使用或直接访问。在类内部的方法中调用时用self.__private_attrs

    私有方法:__private_method:两个下划线开头,声明该方法为私有方法,不能在类外部被使用或直接访问。在类内部的方法中调用时用self.__private_method

    六、继承

    继承完全可以理解成类之间的类型与子类型关系

    特点:

      (1)在继承中基类的构造不会不自动调用,它需要在其派生类的构造中亲自专门调用。

      (2)在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量,区别在于类中调用普通函数时并不需要带上self参数

      (3)python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始时到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)

    继承写法:

      people.__init__(self,name,age)

      等价于

      super(Man,self).__init__(name,age) 建议使用这种,当父类变更时修改会更方便一些。

    七、经典类和新式类

    经典类:class People:

    新式类:class People(object):

    二者区别主要体现在多继承:

    python2的经典类是按深度优先来继承的,新式类是按照广度优先类继承的

    python3都是广度优先

      

  • 相关阅读:
    Lua笔记
    psp info
    防火墙选项变成灰色解决办法
    server error.分析器错误信息: 未能加载类型. line 1
    [C++][stl]vector、list、deque
    恢复隐藏文件ShowAll.reg
    C++笔记
    C#成员的继承
    C#运算符重载
    .NET每个开发人员现在应该下载的十种必备工具
  • 原文地址:https://www.cnblogs.com/willpower-chen/p/5814650.html
Copyright © 2011-2022 走看看