zoukankan      html  css  js  c++  java
  • 理解python元类

    两篇很好的文章:

    https://blog.51cto.com/kaifly/2115249

    https://stackoverflow.com/questions/100003/what-are-metaclasses-in-python(看最高赞,即第二个回答)

    一点想法:

    1、type是type自己的元类,但是不能通过纯python代码让type生成type类,这是解释器层实现的。type应该说也是对象,因为id(type)是有值的,说明type是一个实体,

    type的类型是一个指向自己的指针,所以说type是type自己的元类。

    2、用class定义类时,如果不指定metaclass,就会去父类找metaclass,如果父类都没有指定,那就用默认的type

    3、python类属性和方法相当于c++的静态成员数据和函数,当一类继承另一类时,并不是复制一份到子类,而是共享同一份

    class Base:
        score = 78
    
    class Child(Base):
        pass
    
    print(Child.score)
    Base.score = 87
    print(Child.score)
    
    输出:78
         87

    说明子类和父类共享一个变量score,而不是将score拷贝一份到子类。

    4、元类其实就是在类对象创造之前,程序员按照自己的需求对类的创建过程进行修修改改,而类装饰器是在类对象被创建之后对类进行修修改改,两者都可以达到对类对象进行定制的目的,对简单的定制更推荐使用类装饰器,因为使用元类比较难理解(对新手而言)

    5、type继承object,而type是type的实例,故type是object的实例(某类的实例也是该类父类的实例),object是type的实例(所有类都是type的实例),所以就有以下关系,反正type和object四种组合都成立

    print(isinstance(type, object))
    print(isinstance(type, type))
    print(isinstance(object, type))
    print(isinstance(object, object))
    
    输出全部是true
  • 相关阅读:
    经典的阿里前端笔试题
    Javascript之浏览器兼容EventUtil
    Javascript之对象的创建
    奇妙的CSS之CSS3新特性总结
    前端优化之无阻塞加载脚本
    正则表达式规则与常见的正则表达式
    全端工程师
    最全前端面试问题及答案总结--《转载》
    奇妙的CSS之布局与定位
    关于在django框架里取已登录用户名字的问题
  • 原文地址:https://www.cnblogs.com/olivertian/p/12236336.html
Copyright © 2011-2022 走看看