zoukankan      html  css  js  c++  java
  • 18.面向对象高阶

    面向对象高阶

    isinstance ,issubclass

    isinstance判断是否为类的实例化对象,会检测父类,有向上传递性,而使用type做判断时只是比较是否属于同一类型.

    类似的还有issubclass,判断是否为其子类,也具有向下传递性.

    反射

    1. hasattr:通过字符串判断对象是否包含对应的属性
    2. getattr:通过字符串用于返回一个对象属性值
    3. setattr:对已存在的属性进行赋值,如果属性不存在会创建一个新的对象属性,并对属性赋值.
    4. delattr:通过字符串删除对象属性值

    元类

    call

    比如在类中定义一个call方法,若有一个这个类的实例化对象,则这个实例化对象也可以调用,调用的过程就是触发call的过程.

    new

    __new__方法的第一个参数是这个类,而其余的参数会在调用成功后全部传递给__init__方法初始化,所以它先于init执行.而且__new__方法返回的值就是一个实例化对象.

    首先我们明确:元类可以造类,类可以造实例化对象

    元类在造类的过程中有2种方法:

    1. 类有类名,基类和名称空间,可以先通过exec方法创建一个名称空间,然后通过元类type()实例化传入参数类名,父类object,和刚创建的名称空间
    2. 通过class关键字加类名,默认父类为object,通过元类中init初始化类名,类的基类object,类的名称空间.

    创建元类

    通过继承type可以创造元类,在自定义元类里通过init初始化类的属性,通常要继承type的init内容,然后通过call方法的返回值来返回实例化对象,在这个过程中对类的实例化会触发call,通过call中的new方法产生对象,在通过类的init初始化对象的属性,最后返回对象.这个就可以当作元类的模板.

    单类

    目的时一个类只能产生一个实例

    1. 利用类的绑定方法的特性
    2. 利用装饰器
    3. 利用元类完成单例

    异常处理

    try:
        1/0
    except Exception as e:
        print(e)
    

    raise

    抛出异常

    assert

    判断某一行代码是否有问题

  • 相关阅读:
    JDBC存取二进制文件示例
    java多线程向数据库中加载数据
    Lucene建索引代码
    postgresql存储二进制大数据文件
    java项目使用Echarts 做柱状堆叠图,包含点击事件
    子页面获取父页面控件
    JSTL和select标签的组合使用
    log4j配置祥解
    IT项目经理应具备的十大软技能
    Spring和Struct整合的三个方法
  • 原文地址:https://www.cnblogs.com/yellowcloud/p/11066813.html
Copyright © 2011-2022 走看看