Python类的创建过程

类的创建过程

以下说的类指的类本身,例如以下代码:

class Foo:
  def __init__(self):
    pass

则指的 Foo 的创建过程,而不是 Foo 的实例。

1. 解析 MRO 记录(Resolving MRO entries)

根据 MRO 规则解析继承关系

2. 确定元类(Determining the appropriate metaclass)

查找元类的过程遵循以下规则:

  1. 如果没有基类且没有指定 metaclass ,则使用 type()
  2. 如果指定了 metaclass 且它不是 type() 的实例,则直接使用 metaclass
  3. 如果指定了 type() 实例的 metaclass 或者有基类,(the most derived metaclass is used. ??)

3. 准备命名空间(Preparing the class namespace)

当元类确定后,类的命名空间也可以确定了。 如果元类有 __prepare__ 属性,则 namespace = metaclass.__prepare__(name, bases, **kwargs),否则命名空间会初始化为有序的空map(empty ordered mapping.)

4. 执行 Class 内语句(Executing the class body)

类内的语句通过 exec(body, globals(), namespace) 来执行。与正常的 exec() 不同的是当类定义在一个函数内部时其可以访问当前和外层的作用域。

即使在函数内定义的类,其内部的方法也无法访问类的作用域。类内的定义的变量通过类实例或类对象来访问,或者通过 __class__

5. 创建类对象(Creating the class object)

经过以上步骤后,通过 metaclass(name, bases, namespace, **kwargs) 来创建类。

关于 __init__

以上步骤是创建类自身。例如开头的例子,以上步骤只是创建了 Foo__init__ 是类实例化后才执行的,f = Foo() 这时候才会执行 __init__

原文地址:https://blog.51cto.com/3772401/2474980

时间: 2024-10-10 12:16:45

Python类的创建过程的相关文章

python 类的创建、实例化、构造函数、私有属性

例子: #!/usr/bin/env python class people:         def __init__(self,name):                 self.name = name         def __sayHi(self):                 print 'How do you do!'         def printname(self):                 print 'Hi,%s' % self.name        

python 类的创建和使用

原文:https://www.runoob.com/python3/python3-class.html 原文:https://www.cnblogs.com/danhuai/p/11731319.html class MyClass: """一个简单的类实例""" i = 12345 def f(self): return 'hello world' # 实例化类 x = MyClass() # 访问类的属性和方法 print("My

【原创】Python 对象创建过程中元类, __new__, __call__, __init__ 的处理

原始type: type是最原始的元类,其__call__方法是在你使用" t_class = type(classname_string, base_classes_tuple, attributes_dict)" 这种语法来使用时, 在__call__方法内使用又会调用type的__new__和__init__方法来创建classname_string的具体类,并初始化类信息.当type(***)调用完成, classname_string代表的类可以用来创建实例了. 元类调用过程

【python】-- 类的创建、__new__、__metaclass___

类的创建 前面的随笔都是关于类的知识,通过类创建对象,那这个类到底是怎么产生的呢? 1. 传统创建类 class Foo(object): def __init__(self,name): self.name = name f = Foo("shuaigaogao") f 是通过 Foo 类实例化的对象,其实,不仅 f 是一个对象,Foo类本身也是一个对象,因为在Python中一切事物都是对象,按照一切事物都是对象的理论:obj对象是通过执行Foo类的构造方法创建,那么Foo类对象应该

深入理解Java对象的创建过程:类的初始化与实例化

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 深入理解Java对象的创建过程:类的初始化与实例化 - Rico's Blogs - 博客频道 - CSDN.NET Rico's Blogs 潜心修炼,成为一个更好的人. 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [5月书讯]流畅

【python】-- 类的实例化过程、特征、共有属性和私有属性

实例化过程 1.类的定义和语法 class dog(object): #用class定义类 "dog class" #对类的说明 def __init__(self,name): #构造函数或者是构造方法,也可以叫初始化方法 self.name = name def sayhi(self): #类方法 "sayhi funcation" #对类方法的说明 print("hello,i am a dog,my name is ",self.name

python3 速查参考- python基础 8 -> 面向对象基础:类的创建与基础使用,类属性,property、类方法、静态方法、常用知识点概念(封装、继承等等见下一章)

基础概念 1.速查笔记: #-- 最普通的类 class C1(C2, C3): spam = 42 # 数据属性 def __init__(self, name): # 函数属性:构造函数 self.name = name def __del__(self): # 函数属性:析构函数 print("goodbey ", self.name) I1 = C1('bob') #-- Python的类没有基于参数的函数重载 class FirstClass: def test(self,

类创建过程

本篇文章用于记录类创建过程相关的文档,可以为以后相关博文的编写提供材料.先在这里做文档备份. 官方文档:https://docs.python.org/3.8/reference/datamodel.html#customizing-class-creation Python Cookbook 9.15具体内容: Adding optional keyword arguments to a metaclass requires that you understand all of the ste

Python中动态创建类实例

Python中动态创建类实例 简介 在Java中我们可以通过反射来根据类名创建类实例,那么在Python我们怎么实现类似功能呢? 其实在Python有一个builtin函数import,我们可以使用这个函数来在运行时动态加载一些模块.如下: def createInstance(module_name, class_name, *args, **kwargs): module_meta = __import__(module_name, globals(), locals(), [class_n