美文网首页
Python面向对象的学习

Python面向对象的学习

作者: 雪之梦_8f14 | 来源:发表于2019-07-19 05:55 被阅读0次

    思维导图

    • 包、模块管理
    • 私有的本质
    • 面向对象的三大特性
    • 多继承的顺序问题(不提议多继承)
    • 继承 中的方法重写:两种方式 覆盖 和扩展(super) 其实没多大区别
    • 类的属性、类方法、静态方法 实例属性和实例方法
    • 单例
    • 异常 try except else finally
    • 文件
    • eval函数

    code

    • objects项目

    面向对象

    • 内置函数 使用函数dir()可查看所有的内置变量

    • 举例说明 注意:类名和文件名不能一致 否则会报错

    calss 类名:
      def func1(self, arg1...):
        pass
    
    • 方法的定义格式几乎和学过的函数一样 区别在于 第一个参数必须是 self

    • 创建对象 对象变量 = 类名()

    • init中构造的类变量会被pycharm记住, 在使用类对象的时候会有提示,在普通方法中构造的变量也会有提示,但是在类对象调用这个方法之前使用这个变量会报错 因为这个变量还没有固赋值(此处所说的变量是公开的,不是私有的)

    • python中的私有并非真正的私有, 只是将这个变量或者方法的名字改掉了 比如我有一个student类,类中有一个__age私有变量, 那么 在外部使用 stu._student__age就可以访问到__age这个变量 私有方法亦是如此

    • python继承中,不会自动调用父类的构造函数必须手动调用

        def __init__(self):
            print("this is __init__ function in subbird")
            super(subbird, self).__init__() # 也可以是  super().__init__()
    
    class cat(animal):
        def __init__(self):
            super().__init__()
            print("__init__ in cat class")
    
    • 继承的方法也是
        def eat(self):
            print("eat in cat")
            super().eat()
    
    • 在子类中 即使使用 super()._animal__age 也不能访问到父类的私有成员
    • python中的类属性和对象属性
      • 类属性是指 在类中定义的属性
      • 对象属性是指在构造方法中定义的属性
      • 调用类属性可以使用 类.属性 也可以使用对象.属性 但是推荐使用类.属性
      • 注意:当给类属性赋值的时候,不能使用对象.属性 = val 否则会在对象中增加一个属性 而不是给类属性赋值
    class subbird(bird2, bird):
        count = 0
        __num = 0
        def __init__(self):
            subbird.count += 1
            subbird.__num += 1
            print("this is __init__ function in subbird")
            super(subbird, self).__init__()
    
        def bark(self):
            print("bark in subbird")
            super(subbird, self).bark()
    
    sub1 = subbird()
    print(subbird.count)
    
    print(subbird._subbird__num)
    
    sub1.count = 100 #
    print(sub1.count) # 100
    print(subbird.count) # 2
    
    • 类方法可以调用类属性和其他的类方法
    • 类方法的定义
      @classmethod
        def method1(cls):
            pass
    
    • 类方法的调用: 类名.类方法 类对象.类方法

    静态方法

    • 应用场景

      • 既 不需要 访问 实例属性 或者调用 实例方法
      • 也 不需要 访问 类属性 或者调用 类方法
    • 定义

    @staticmethod
        def method2():
            print("this is static method in people class")
            pass
    
    • 调用 类名.静态方法 对象名.静态方法

    单例模式

    new 方法

    • 是object的内置静态方法
    • 作用:
      • 在内存中为对象分配空间
      • 返回对象的引用
      • Python 的解释器获得对象的 引用 后,将引用作为 第一个参数,传递给 init 方法
    • 重写方法:
      def __new__(cls, *args, **kwargs):
            if cls.instance is None:
                cls.instance = super().__new__(cls)
            return cls.instance
    

    举例说明:

    class singlepeople:
        instance = None
        init_flag = False
    
        def __init__(self):
            if not singlepeople.init_flag:
                singlepeople.init_flag = True
            else:
                return
            self.name = None
            pass
        
        def __new__(cls, *args, **kwargs):
            if cls.instance is None:
                cls.instance = super().__new__(cls)
            return cls.instance
    
    ---
    from models.singlepeople import singlepeople
    
    p = singlepeople()
    print(p)
    p.name = "smx"
    print(p.name)
    
    p2 = singlepeople()
    # p2.name = "xyj"
    print(p2)
    print(p2.name)
    print(p.name)
    

    异常

    目标

    • 异常的概念
    • 捕获异常
    • 传递异常
    • 抛出异常

    捕获异常

    • 简单的捕获异常语法
    try:
        # 提示用户输入一个数字
        num = int(input("请输入数字:"))
    except:
        print("请输入正确的数字")
    
    • 错误类型捕获
    • 语法
    try:
        # 尝试执行的代码
        pass
    except 错误类型1:
        # 针对错误类型1,对应的代码处理
        pass
    except 错误类型2:
        # 针对错误类型2,对应的代码处理
        pass
    except (错误类型3, 错误类型4):
        # 针对错误类型3 和 4,对应的代码处理
        pass
    except Exception as result:
        # 打印错误信息
        print(result)
    else:
        # 没有异常才会执行的代码
        pass
    finally:
        # 无论是否有异常,都会执行的代码
        print("无论是否有异常,都会执行的代码")
    
    • 举例:
    try:
        num = int(input("请输入整数:"))
        result = 8 / num
        print(result)
    except ValueError:
        print("请输入正确的整数")
    except ZeroDivisionError:
        print("除 0 错误")
    except Exception as result:
        print("未知错误 %s" % result)
    else:
        print("正常执行")
    finally:
        print("执行完成,但是不保证正确")
    

    抛出异常

    • 代码
     # 1> 创建异常对象 - 使用异常的错误信息字符串作为参数
        ex = Exception("密码长度不够")
    
        # 2> 抛出异常对象
        raise ex
    

    模块和包

    目标

    • 模块
    • 发布模块

    模块

    • 模块是 Python 程序架构的一个核心概念
    • 每一个以扩展名 py 结尾的 Python 源代码文件都是一个 模块
    • 模块名 同样也是一个 标识符,需要符合标识符的命名规则
    • 在模块中定义的 全局变量 、函数、类 都是提供给外界直接使用的 工具
    • 模块 就好比是 工具包,要想使用这个工具包中的工具,就需要先 导入 这个模块

    导入模块

    • import 导入
    import module
    import module as md
    
    • from import 导入
    from module import *
    
    • 模块搜索顺序


      图片.png
    • 原则


      图片.png

    图片.png

    发布模块

    图片.png
    图片.png
    图片.png

    文件

    目标

    • 文件
    • 文件操作
    • 文件、文件夹的常用操作
    • 文本文件的编码方式

    文件读写

    图片.png
    图片.png
    图片.png
    图片.png
    图片.png
    图片.png

    文件目录常用操作

    图片.png

    文件的编码格式

    图片.png
    图片.png

    eval函数

    图片.png

    教程笔记图

    image.png
    • 初始化方法


      image.png
      image.png
      image.png
    • 图片.png
      图片.png

    相关文章

      网友评论

          本文标题:Python面向对象的学习

          本文链接:https://www.haomeiwen.com/subject/unjwhctx.html