zoukankan      html  css  js  c++  java
  • 元类

    一、元类的的概念

    (1)旧式类和新式类

    #经典类   继承:instance类型(Python2)
    class MyClass:
        pass
    
    #新式类:继承Object
    class Test(object):
        pass

    旧式类:对于旧式类,类(class)和类型(type)并不完全相同,一个旧式类的实例总是继承一个名为instance的内置类型。如果obj表示旧式类的实例,那么obj.class表示该类,但type(obj)始终是instance类型。

    新式类:新式类统一了类(class)和类型(type)的概念,如果obj是新式类的实例,type(obj)则与obj.class相同。

    注意点:

    python2中,默认所有类都是旧式类。python2.2之前不支持新式类。

    python3中,所有类都是新式类。

    (2)class和type的类型

    class Test(object):
        pass
    
    t=Test()
    
    print(type(t))  # <class '__main__.Test'>
    print(type(Test))   # <class 'type'>
    print(type(type)) # <class 'type'>

    type的类型是type

    (3)什么是元类

    python中的任何新式类以及python 3中的任何类都是type元类的一个实例,函数type实际上是一个元类,type就是python在背后用来创建所有类的元类。

    二、元类和继承的基类

    type:是元类,所有的类都是通过type所创建出来的

    object:顶层的基类,所有类继承的顶层父类都是object

    三、使用type动态定义类

    type(name,bases,dict):调用type()

    • name:指定类名称,将成为该类的name属性
    • bases:指定继承类的基类元组,将成为该类的bases属性
    • dict:指定包含类主体定义的名称空间字典,将成为该类的dict属性。

    四、自定义元类

     

  • 相关阅读:
    android-studio add jar
    android-studio 下载
    fastjson对Date类型的格式化
    springboot多环境区分
    Docker开启远程访问
    docker中批量删除 tag为none的镜像
    项目无法依赖Springboot打出的jar
    Spring Boot使用Swagger2
    mysql表时间戳字段设置
    springMVC dubbo注解无效,service层返回空指针
  • 原文地址:https://www.cnblogs.com/crystal1126/p/13625212.html
Copyright © 2011-2022 走看看