Update 4.md

pull/71/head
谭九鼎 2020-10-19 13:37:33 +08:00 committed by GitHub
parent 8a1a72247a
commit 5298893088
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 1 additions and 1 deletions

View File

@ -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。