From 8a1a72247ac199d29ba4dea29ea63af2840c6244 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=AD=E4=B9=9D=E9=BC=8E?= <109224573@qq.com> Date: Mon, 19 Oct 2020 13:35:25 +0800 Subject: [PATCH 1/2] Update 4.md --- Article/PythonBasis/python12/4.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Article/PythonBasis/python12/4.md b/Article/PythonBasis/python12/4.md index 2376a9b..07e8422 100644 --- a/Article/PythonBasis/python12/4.md +++ b/Article/PythonBasis/python12/4.md @@ -34,9 +34,9 @@ class MyObject(object): 如果是这样写的话,Python 就会用元类来创建类 MyObject。 -当你写下 `class MyObject(object)`,但是类对象 MyObject 还没有在内存中创建。P +当你写下 `class MyObject(object)`,但是类对象 MyObject 还没有在内存中创建。 -ython 会在类的定义中寻找 `__metaclass__` 属性,如果找到了,Python 就会用它来创建类 MyObject,如果没有找到,就会用内建的 type 函数来创建这个类。如果还不怎么理解,看下下面的流程图: +Python 会在类的定义中寻找 `__metaclass__` 属性,如果找到了,Python 就会用它来创建类 MyObject,如果没有找到,就会用内建的 type 函数来创建这个类。如果还不怎么理解,看下下面的流程图: ![__metaclass__的介绍](https://user-gold-cdn.xitu.io/2017/9/6/06c5a4390887abd3d79401848742f5ce) From 5298893088fac7cc8b7fb22c4ef2a1fda930ae64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=AD=E4=B9=9D=E9=BC=8E?= <109224573@qq.com> Date: Mon, 19 Oct 2020 13:37:33 +0800 Subject: [PATCH 2/2] Update 4.md --- Article/PythonBasis/python12/4.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Article/PythonBasis/python12/4.md b/Article/PythonBasis/python12/4.md index 07e8422..520e03e 100644 --- a/Article/PythonBasis/python12/4.md +++ b/Article/PythonBasis/python12/4.md @@ -50,7 +50,7 @@ class Foo(Bar): 它的判断流程是怎样的呢? -首先判断 Foo 中是否有 `__metaclass__` 这个属性?如果有,Python 会在内存中通过 `__metaclass__` 创建一个名字为 Foo 的类对象(注意,这里是类对象)。如果 Python 没有找到`__metaclass__` ,它会继续在 Bar(父类)中寻找`__metaclass__` 属性,并尝试做和前面同样的操作。如果 Python在任何父类中都找不到 `__metaclass__` ,它就会在模块层次中去寻找 `__metaclass__` ,并尝试做同样的操作。如果还是找不到` ` `__metaclass__` ,Python 就会用内置的 type 来创建这个类对象。 +首先判断 Foo 中是否有 `__metaclass__` 这个属性?如果有,Python 会在内存中通过 `__metaclass__` 创建一个名字为 Foo 的类对象(注意,这里是类对象)。如果 Python 没有找到`__metaclass__` ,它会继续在 Bar(父类)中寻找`__metaclass__` 属性,并尝试做和前面同样的操作。如果 Python在任何父类中都找不到 `__metaclass__` ,它就会在模块层次中去寻找 `__metaclass__` ,并尝试做同样的操作。如果还是找不到 `__metaclass__` ,Python 就会用内置的 type 来创建这个类对象。 其实 `__metaclass__` 就是定义了 class 的行为。类似于 class 定义了 instance 的行为,metaclass 则定义了 class 的行为。可以说,class 是 metaclass 的 instance。