python--元类

   在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段。在Python中这一点仍然成立:在Python的世界里,一切皆为对象:数值序列字典函数模块、、、等等,无一例外。其中,“类也是对象” 的概念最让人匪夷所思,这完全超越了传统的OO(object oriented)思想。


    但是,Python中的类还远不止如此。类同样也是一种对象。是的,没错,就是对象。只要你使用关键字class,Python解释器在执行的时候就会创建一个对象

class User(object):

    pass

user = User()

print(user)


将在内存中创建一个对象,名字就是 User。这个对象(类对象User)拥有创建对象(实例对象)的能力。但是,它的本质仍然是一个对象,于是乎你可以对它做如下的操作:

1.你可以将它赋值给一个变量

2.你可以拷贝它

3.你可以为它增加属性

4.你可以将它作为函数参数进行传递

class User(object):

        def say(self):

            print("hello word")


Python解释器执行class语句时:

确定元类mcls。元类的查找优先级为:

首先查找类User是否拥有属性__metaclass__

否则查找类User的父类是否具有属性__metaclass__

否则查找类User所在模块是否具有全局变量__metaclass__

否则使用默认元类(经典类:types.ClassType;新式类:type)


                              (未完待续)



python中新式类与旧式类的区别:

新式类和经典类的最大不同之处在于,所有的新式类必须至少一个父类,参数bases可以是一个或者多个用于继承的父类。

新式类都从object继承,经典类不需要。

新式类的MRO(method resolution order基类搜索顺序)算法采用C3算法广度优先搜索,而旧式类的MRO算法是采用深度优先搜索

新式类相同父类只执行一次构造函数,经典类重复执行多次。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 类也是对象,在理解元类之前,你需要先掌握Python中的类。Python中类的概念借鉴于Smalltalk,这显得...
    雲凌禹阅读 476评论 0 3
  • 最近接触到一个对xml进行序列化的python库,实际上可以理解为一个小的ORM,只不过数据的来源是xml而不是数...
    TypingQuietly阅读 2,922评论 0 5
  • 1. 类也是对象 在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段。在Python中这一点仍然成立:...
    ztfdeveloper阅读 300评论 0 0
  • 声明:本文仅限于简书发布,其他第三方网站均为盗版,原文地址: python元类浅析 在 python 的新式类中,...
    liuliqiang阅读 486评论 0 4
  • 在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段。在Python中这一点仍然成立类也是对象。但是,P...
    壁花烧年阅读 342评论 0 0