返回介绍

编写元类

发布于 2024-01-29 22:24:14 字数 1023 浏览 0 评论 0 收藏 0

到目前为止,我们已经看到了Python如何把类创建调用指向一个元类,如果提供了一个元类的话。然而,我们实际如何编写一个元类来定制type呢?

事实上,我们已经知道了大多数情况——用常规的Python class语句和语法来编写元类。唯一的实质区别是,Python在一条class语句的末尾自动调用它们,而且它们必须通过type超类附加到预期的接口。

基本元类

可能你能够编写的最简单元类只是带有一个__new__方法的type的子类,该方法通过运行type中的默认版本来创建类对象。像这样的一个元类__new__,通过继承自type的__new__方法而运行。它通常执行所需的任何定制并且调用type的超类的__new__方法来创建并运行新的类对象:

这个元类实际并没有做任何事情(我们可能也会让默认的type类创建类),但是它展示了将元类接入元类钩子中以定制——由于元类在一条class语句的末尾调用,并且因为type对象的__call__分派到了__new__和__init__方法,所以我们在这些方法中提供的代码可以管理从元类创建的所有类。下面是应用中的实例,将打印添加到元类和文件以便追踪:

在这里,Spam继承自Eggs并且是MetaOne的一个实例,但是X是Spam的一个实例并且继承自它。当这段代码在Python 3.0下运行的时候,注意在class语句的末尾是如何调用元类的,在我们真正创建一个实例之前——元类用来处理类,并且类用来处理实例:

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文