zoukankan      html  css  js  c++  java
  • day17-Python运维开发基础(类的封装 / 对象和类的相关操作、构造方法)

    1. 类的封装及相关操作

    # ### oop 面向对象程序开发
    """
    #用几大特征表达一类事物称为一个类,类更像是一张图纸,表达的是一个抽象概念
    """
    
    # (1) 类的定义
    # 1
    class Car:
        pass
        
    # 2 推荐
    class Car():
        pass
        
    # 3 
    class Car(object):
        pass
        
    # (2)类的实例化
    class Car():
        pass
    # 实例化对象 产生obj对象
    obj = Car()
    
    # (3)类的基本结构
    class Car():
        # 成员属性
        color = "绿色"
        # 成员方法
        def didi():
            print("小车会滴滴的叫")
    
    # 语法上允许,但是严禁使用
    class Car():
        if 5==5:
            print(1234)
    # 改成
    class Car():
        def func():
            if 5==5:
                print(1234)
    
    # (4)类的命名
    """
    驼峰命名法: 推荐使用大驼峰命名法 -> mycar => MyCar
    """
    class MyHouse():
        pass
        
    class ChangyuanZhenHaoKan():
        pass
    OOP面向对象程序开发 示例代码
    # ### oop 封装 
    """
    对象的相关操作
    语法:
        对象.属性
        对象.方法
        
    类中的绑定方法:
        (1) 绑定到对象 : 在调用当前方法时,系统自动把该对象当成参数进行传递
        (2) 绑定到类   : 在调用当前方法时,系统自动把该类当成参数进行传递
    """
    
    # 定义一个车类
    class Car():
        # 公有属性
        color = "屎黄色的"
        
        # 私有属性
        __logo = "奥利a6"
        
        # 公有方法
        def drive(self):
            print("小车可以驾驶,载人拉客")
            
        # 私有方法
        def __price(self):
            print("车的成本价格保密")
    
    # 实例化对象
    obj = Car()
    
    # (1)实例化的对象访问公有成员属性和方法
    # 调用属性
    print(obj.color)
    # 调用方法
    """obj.drive 系统自动把obj这个对象传递给drive方法中,self这个形参进行接收"""
    obj.drive()
    
    
    # (2)实例化的对象动态添加公有成员属性和方法
    # 添加属性
    obj.color = "天蓝色"
    print(obj.color)
    
    # 添加方法
    # (1) 添加无参方法
    def engine():
        print("我是2.0发动机")
    obj.engine = engine
    obj.engine()
    # __dict__ 查看对象或者类中的内部成员
    print(obj.__dict__)
    
    # (2) 添加有参方法
    """
    def carname(name):
        print("小车的名字是",name)
    obj.carname = carname
    obj.carname("林肯加长版,前后加辅轮")
    """
    # 升级1
    """
    def carname(obj,name):
        print(obj.color) # 天蓝色
        print(name)      # 林肯加长版
    obj.carname = carname
    obj.carname(obj,"林肯加长版")
    """
    # 升级2 形成绑定方法(绑定到对象)
    def carname(obj,name):
        print(obj.color) # 天蓝色
        print(name)      # 林肯加长版
        
    import types
    # MethodType(绑定的函数,绑定的对象) 把那个方法绑定到那个对象上
    obj.carname = types.MethodType(carname,obj)
    obj.carname("林肯加长80米版") # 只需要自己手动传递一个参数即可,系统自己传递obj
    
    # (3) 添加lambda表达式
    obj.carlight = lambda : print("把车灯换成手电筒")
    obj.carlight()
    类的封装-对象的相关操作 示例代码

     

    # ### oop 封装 
    """
    类的相关操作
    # 语法:
        类.属性
        类.方法
    """
    class MyCar():
        # 公有属性
        oil = 2.0
        # 私有属性
        __price = "80万"
        
        # 公有方法
        def oil_info():
            print("我的百公里油耗2.0")
        # 私有方法
        def __price_info():
            print("我的价格保密")    
    """查看类中的成员"""
    dic = MyCar.__dict__
    print(dic)
    
    # 实例化对象
    obj = MyCar()
    # 对象无法调用无参方法
    # obj.oil_info() error
    
    
    # (1)定义的类访问公有成员属性和方法
    # 调用属性
    print(MyCar.oil)
    # 调用方法
    MyCar.oil_info()
    
    
    # (2)定义的类动态添加公有成员属性和方法
    # 添加属性
    MyCar.logo = "丰田_荣放"
    print(MyCar.logo , MyCar.__dict__  )
    
    # 添加方法
    # (1) 添加无参方法
    def dahuangfeng():
        print("我的车能变形,大黄蜂再此")
    MyCar.dahuangfeng = dahuangfeng
    MyCar.dahuangfeng()
    
    # (2) 添加有参方法
    def qingtianzhu(name):
        print("我的车能变形,我叫{},一柱擎天".format(name))
    MyCar.qingtianzhu = qingtianzhu
    MyCar.qingtianzhu("擎天柱")
    
    # (3) 添加lambda表达式
    MyCar.mieba = lambda : print("我是灭霸,人家都叫我爸爸,一个响指,十万八千里")
    MyCar.mieba()
    
    # (4) 无法在类外调用私有成员
    # MyCar.__price_info() error
    
    # (5) 对象无法调用无参方法
    # obj.mieba()
    print(obj.logo)
    # obj.abc = 10
    # 类不能调用对象中的成员
    # print(MyCar.abc)
    
    """
    总结:
        对象调用成员时,先找该对象中是否含有,
        如果有,调用自己的,如果没有,调类的(公有的)
    
        对象调用类中成员是单向的,类不能反过来调用对象中的成员;
        
        无论是类还是对象,其中的成员都归属与自己本身,
        对象如果没有会调用类中成员,但是类没有的话不会调用对象中成员
        是单向的,对象和类都不能互相修改或者删除对方的成员    
    """
    封装_类的相关操作 示例代码
    # ### 1.如果使用类中的私有成员
    class Plane():
        # 公共属性
        captain = "宗永玲"
        
        # 私有属性
        __air_sistem = 18
        
        # 公有绑定对象方法
        def fly1(self):
            print("飞机会飞,百公里油耗100L")
    
        # 公有无参普通方法
        def fly2():
            print("飞机会飞,百公里油耗200L")
            
        # 私有绑定对象方法
        def __fly3(self):
            print("飞机会飞,百公里油耗300L")
        
        # 私有无参普通方法
        def __fly4():
            print("飞机会飞,百公里油耗300L")
            
        # 定义一个公有绑定方法,调取类中的成员
        def pub_info(self): # self 是对象
            # self = obj  => obj.captain  
            print(self.captain)
            # 利用类内的公有方法,间接获取类中的私有成员(属性)
            print(self.__air_sistem)
            # 调用公有方法
            self.fly1()
            # 利用类内的公有方法,间接获取类中的私有成员(方法)
            self.__fly3()
            
        # 定义一个公有普通方法,调取类中的成员
        def pub_info2():
            print(Plane.captain) # Plane 是类
            print(Plane.__air_sistem)
            Plane.fly2()
            Plane.__fly4()
            
            
    # 实例化对象
    obj = Plane()
    # 1.私有成员的改名策略  : _类名__私有名字 (不推荐)
    print(Plane.__dict__)
    # 调用私有属性
    print(Plane._Plane__air_sistem)
    # 调用私有方法
    obj._Plane__fly3()
    
    # 2.利用类中的公有方法,间接调用私有成员 (推荐)
    # self 形参接收到obj这个对象
    # print(obj.captain)
    # obj.pub_info()
    Plane.pub_info2()
    
    
    # ### 2.删除类对象中的成员
    """删除的时候,看清该成员的归属"""
    # 删除对象中的成员
    # 删除属性
    obj.captain = "朱京城"
    print(obj.captain)
    del obj.captain
    print(obj.captain)
    
    # 删除方法
    print(obj.__dict__)
    obj.func1 = lambda : print("我是func1")
    obj.func1()
    del obj.func1
    # obj.func1()
    
    # 删除类中的成员
    # 删除属性
    # del Plane.captain
    # print(Plane.captain) error
    
    # 删除方法
    del Plane.pub_info
    # Plane.pub_info(obj) error
    # obj.pub_info() error
    
    # 删除私有成员(不推荐,破坏类中结构)
    # del Plane._Plane__air_sistem
    # print(Plane._Plane__air_sistem)
    删除成员_调用私有成员 示例代码

     2. 构造方法

    # ### 魔术方法 :特定时机自动触发
    """__init__ 构造方法"""
    '''
        触发时机:实例化对象,初始化的时候触发
        功能:为对象添加成员
        参数:参数不固定,至少一个self参数
        返回值:无
    '''
    
    # (1) 基本语法
    class MyClass():
        def __init__(self):
            self.name = "黄乐锡"
            
    # 实例化对象
    obj = MyClass()
    print(obj.__dict__)
    print(obj.name)
    
    # (2) 传递2个参数
    class MyClass():
        def __init__(self,name):
            # self.成员属性 = 参数值
            #       name    = name
            self.name = name
            
    # 实例化对象
    """李诗韵默认传递到name形参进行接收"""
    obj = MyClass("李诗韵")
    print(obj.name)
    
    
    # (3) 多个参数
    """同一个类,可以实例化出多个对象,而对象和对象之间,彼此独立"""
    class Children():
        def __init__(self,name,skin):
            self.name = name
            self.skin = skin
            
        def eat(self):
            print("小孩一下生手里拿了2串大腰子")
            
        def drink(self):
            print("小孩一下生手里拿了两瓶啤酒")
            
        def __sleep(self):
            print("小孩一天睡觉时间是23个小时")
            
        def pub_info(self):
            # 在类中,只能使用对象.属性/方法 或 类.属性/方法进行调用
            print("该对象name是{},该对象skin是{}".format(self.name,self.skin))
    
    # 实例化一个对象
    datuichui = Children("大铁锤","粉色")
    datuichui.pub_info()
    
    # 实例化第二个对象
    wanggangdan = Children("王钢蛋","黑色")
    wanggangdan.pub_info()
    
    # 实例化第三个对象
    wangbaoqiang = Children("王宝强","绿色")
    wangbaoqiang.pub_info()
    构造方法 示例代码

    day17

  • 相关阅读:
    使用postman做接口测试(三)
    使用postman做接口测试(二)
    使用postman做接口测试(一)
    RobotFramework安装扩展库包autoitlibrary(四)
    RobotFramework安装扩展库包Selenium2Library(三)
    记录.gitattributes 设置合并时使用本地文件无效的解决方案
    golang 踩坑日记
    linux常用命令记录
    vim配置文件
    mysql case when记录
  • 原文地址:https://www.cnblogs.com/reachos/p/12168653.html
Copyright © 2011-2022 走看看