zoukankan      html  css  js  c++  java
  • Python面向对象OOP

    面向对象-OOP

    面向对象编程 Object Oriented Programming 简称OOP

    面向过程编程 Procedure Oriented Programming 简称POP

    POP思想

    把大象装进冰箱需要几步?

    • 打开冰箱门
    • 把大象装进去
    • 关上冰箱门

    OOP思想

    把大象装进冰箱需要几步?首先建立抽象模型--

    • 大象

      大象属性:四条腿,一条尾巴,一个头

      大象功能:走进冰箱

    • 冰箱

      冰箱属性:有两个门

      冰箱功能:门可以打开和关闭

    创建类进行实例化对象并使用

    # 面向对象基本实现
    """
    类有特征和功能两个内容组成:
        属性:颜色、品牌、排量
        方法:驾驶、运货
    """
    
    
    # 定义汽车类,类名使用驼峰命名法
    class Car():
        # 属性
        color = '蓝色'
        brand = 'volvo'
        pailiang = '2.0T'
    
        # 方法
        def yunhuo(self):
            print('运了一箱纸')
    
        def jiashi(self):
            print('开车去上班')
    
    # 使用Car类实例化对象
    car = Car()
    # 通过对象调用方法
    car.yunhuo()
    car.jiashi()
    # 通过对象获取属性
    print(car.brand)
    print(car.color)
    print(car.pailiang)
    

    对象成员的操作

    什么是对象成员?

    • 实例化对象之后,类种定义的属性和方法,可以使用对象进行操作
    • 类中的属性称为成员属性,类中的方法称为成员方法
    class Car():
        # 属性
        color = '蓝色'
        brand = 'volvo'
        pailiang = '2.0T'
    
        # 方法
        def yunhuo(self):
            print('运了一箱纸')
    
        def jiashi(self):
            print('开车去上班')
    
    
    # 实例化对象,一个类可以实例化多个对象
    c = Car()
    print(c)
    b = Car()  # <__main__.Car object at 0x000002001E5C2FA0>
    print(b)  # <__main__.Car object at 0x000002001E5C2FA0>
    """
    上面两个对象,通过car类实例化生成
    但c和cc是两个不同的对象
    """
    # 通过对象获取类中属性,对象先访问对象自己的属性,如果没有就访问类的属性
    print(c.color)  # 蓝色
    # 修改类中属性值
    c.color = '黑色'  # 黑色
    print(c.color)
    print(b.color)  # 蓝色   只修改了c对象的属性
    
    # 删除对象属性,针对对象c修改的属性可以进行删除操作
    del c.color
    print(c.color)  # 蓝色
    
    # 添加类中属性
    c.name = 's60L'
    print(c.name)  # s60L
    # print(b.name)  # AttributeError: 'Car' object has no attribute 'name',在类的外部添加属性只添加了对象c的属性
    
    # 删除属性
    del c.name  # 删除成功,在类外添加的属性可以删除
    
    # 通过对象获取类中方法,如果对象c没有自己的方法,那么就会访问对象c这个类的方法
    c.yunhuo()  # 运了一箱纸
    
    
    # 修改对象方法
    def func():
        print('修改了对象的方法')
    
    
    c.yunhuo = func
    c.yunhuo()  # 修改了对象的方法
    
    # 给对象添加方法
    c.addfunc = func
    c.addfunc()  # 修改了对象的方法
    
    # 删除对象方法,新增加和修改的成员方法可以删除
    del c.addfunc  # 删除成功
    del c.yunhuo  # 删除成功
    

    self

    """
    self中文翻译:自己、本身
    self在类的方法中代表当前这个对象
    self代表调用这个方法的对象
    self可以在类的内部代替对象进行各种操作
    """
    
    
    class Person():
        # 成员属性
        name = 'python'
        age = '11'
        sex = '男'
    
        # 成员方法
        def sing(self):
            print('唱歌')
    
        def dance(self):
            print('跳舞')
    
        def eat(self):
            print('吃饭')
            # 修改对象属性
            self.name = 'java'
            print(self.name)  # java
            # 添加对象属性
            self.email = '123@126.com'
            print(self.email)  # 123@126.com
            # 调用对象方法
            self.dance()  # 跳舞
    
        # 添加成员方法时使用self调用成员属性
        def play(self):
            print(f'我是{self.name},我再玩游戏')  # 我是java,我再玩游戏
    
        def func():
            print('这是一个绑定类方法')  # 这是一个绑定类方法
    
    
    # 测试在类的内部是否可以访问成员
    
    # 实例化对象
    p = Person()
    # 类的外包调用成员属性
    print(p.name)
    p.eat()
    p.play()
    Person.func()
    

    析构方法__del__

    析构方法,在对象被销毁时触发

    • 作用:关闭打开的资源
    • 注意:是对象销毁时触发了析构方法,而不是析构方法销毁了对象

    对象在哪些情况下会被销毁:

    • 程序执行完毕,内存中所有资源都会被销毁
    • 使用del删除对象 (del 对象)
    • 当对象没有被引用时
    # 析构方法__del__
    # 析构方法,在对象被销毁时关闭初始化方法中打开的文件
    """
    定义一个类,完成信息的记录
        调用对象的时候传递一个信息
        对象创建一个文件,开始写入,写入完成后关闭这个文件
    """
    import time
    
    fp = open('./txt/7.txt', 'a+', encoding='utf-8')
    fp.write('sss')
    fp.close()
    
    
    class writeLog():
        fileurl = './'
        filename = '000.log'
    
        def __init__(self):
            # print('打开文件')
            self.fp = open(self.fileurl + self.filename, 'a+', encoding='utf-8')
    
        def wLog(self, s):
            # self.fileobj.write(s)
            print(f'文件{s}写入成功')
    
        # 析构方法,在对象被销毁时关闭初始化方法中打开的文件
        def __del__(self):
    
            print('关闭文件')
            # self.fileobj.write(s)
            self.fp.close()
    a = writeLog()
    a.wLog('a')
    

    封装日志类

    """
    分析:
    日志文件默认存在当前目录
    日志文件命名格式:2021-12-10.log
    日志内容格式:2021-12-10 10:10:10 错误信息:。。。。
    
    属性:成员属性作用存储信息,供成员方法使用
    fileurl日志文件地址
    filename 日志文件名称
    fileobj 打开的文件对象
    
    方法:具体完成的一个功能的过程
    __init__()  初始化方法:完成对象的初始化,并打开文件
    wlog()  负责接收用户的日志信息,并写入到日志文件中
    __del__ 析构方法:在对象销毁时关闭打开的文件
    """
    import time
    
    
    class mylog():
        # 文件存储位置
        fileurl = './'
        # 文件命名
        filename = str(time.strftime('%Y-%m-%d')) + '.log'
        # 打开的文件对象
        fileobj = None
    
        # 初始化对象
        def __init__(self):
            self.fileobj = open(self.fileurl + self.filename, 'a+', encoding='utf-8')
            print(self.fileurl + self.filename)
    
        # 写入方法
        def wlog(self, s):
            date = time.strftime('%Y-%m-%d %H:%M:%S')
            msg = date + ' ' + ':' +'  '+ s + '\n'
            print(msg)
            # print(type(self.fileobj))
            self.fileobj.write(msg)
    
        # 析构方法
        def __del__(self):
            # 关闭打开的文件
            self.fileobj.close()
    
    
    # 调用方法
    c = mylog()
    c.wlog('这是一条错误信息,记录在日志中')
    
  • 相关阅读:
    数据库设计_ERMaster安装使用_PowerDesigner数据设计工具
    Maven
    导入别的项目到我的eclipse上出现红色感叹号问题
    SSM集成
    SpringMVC (2)
    Maven: 把聚合工程下的项目导入 Ecplise
    SVN : 在SVN检测下来的Maven项目没有Maven标志
    SVN: 聚合工程下的子工程无法使用 svn:ignore
    Ecplise-SVN插件异常: 由于目标计算机积极拒绝,无法连接。
    Maven异常:Could not find artifact
  • 原文地址:https://www.cnblogs.com/hekaiqiao/p/15688230.html
Copyright © 2011-2022 走看看