元类

作者: 以后的以后_hzh | 来源:发表于2017-11-05 14:43 被阅读0次

在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段。在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算法是采用深度优先搜索

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


相关文章

  • 3.isa

    isa指向 ->实例isa -> 类|类isa -> 元类 | 元类isa -> 根元类|根元类isa -> 根元...

  • Python元类

    元类 元类就是用来创建类的,元类就是类的类。 实例 关于type()函数的使用戳这里 元类为一个函数 元类为一个类

  • isa 和 superclass

    实例对象的 isa 指向类对象,类对象的 isa 指向元类对象,元类的isa 指向基类的元类对象,基类的元类对象的...

  • 友元类和嵌套类

    友元类 友元函数用于类的扩展接口中,类并非只能拥有友元函数,也可以将类作为友元,该类称为友元类。 友元类的所有方法...

  • 29.Python之面向对象的元类

    Python之面向对象的元类 什么是元类?类的类就是元类,元类创建对象。使用class定义的类,用来产生程序员自己...

  • 面向对象 六

    目录 1.元类 1.1 类创建过程 1.2 元类控制类的创建 1.3 元类控制类的创建过程案例 1.4 自定义元...

  • Python 元类

    什么是元类?元类就是创建类的类,type是最原始的一个元类。(实例是实例化的类,而类是元类的实例)python中一...

  • isa

    NSObject的父类为nil NSObject的isa为根元类 元类的isa都为根元类 根元类的isa为本身 根...

  • iOS开发中方法查找流程图

    实例对象的isa指针指向类对象,类对象的isa指针指向元类,元类的isa指针指向根元类,根元类的isa指针指向自己...

  • 类对象、元类

    任何实例的isa指针指向其类对象,类对象的isa指针指向其元类对象,元类对象的isa指针指向根元类对象,根元类对象...

网友评论

      本文标题:元类

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