分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

元类相关(type & metaclass)

发布时间:2023-09-06 01:35责任编辑:胡小海关键词:classmeta

"""
metaclass作用:

???????1) ??拦截类的创建

???????2) ??修改类

???????3) ??返回修改之后的类

"""


"""
为什么要用metaclass类而不是函数?

由于__metaclass__可以接受任何可调用的对象,那为何还要使用类呢,因为很显然使用类会更加复杂啊?这里有好几个原因:

1) ?意图会更加清晰。当你读到UpperAttrMetaclass(type)时,你知道接下来要发生什么。

2) 你可以使用OOP编程。元类可以从元类中继承而来,改写父类的方法。元类甚至还可以使用元类。

3) ?你可以把代码组织的更好。当你使用元类的时候肯定不会是像我上面举的这种简单场景,通常都是针对比较复杂的问题。将多个方法归总到一个类中会很有帮助,也会使得代码更容易阅读。

4) 你可以使用__new__, __init__以及__call__这样的特殊方法。它们能帮你处理不同的任务。就算通常你可以把所有的东西都在__new__里处理掉,有些人还是觉得用__init__更舒服些。

5) 哇哦,这东西的名字是metaclass,肯定非善类,我要小心!

究竟为什么要使用元类?

现在回到我们的大主题上来,究竟是为什么你会去使用这样一种容易出错且晦涩的特性?好吧,一般来说,你根本就用不上它:

“元类就是深度的魔法,99%的用户应该根本不必为此操心。如果你想搞清楚究竟是否需要用到元类,那么你就不需要它。那些实际用到元类的人都非常清楚地知道他们需要做什么,而且根本不需要解释为什么要用元类。” ?—— Python界的领袖 Tim Peters
"""

"""
知识点:
???对象是类创建。创建对象时,类里面的__init__方法会自动执行。 ?对象()会执行类的__call__方法。
???类是type创建。创建类时,type的__init__方法会自动执行。 ?类()会执行执行type的__call__方法。执行完__call__方法后,call方法不仅会调用类的__new__方法,还会调用类的__init__方法。
???????

# 第0步: 执行type的 __init__ 方法【类是type的对象】class Foo:def __init__(self):passdef __call__(self, *args, **kwargs):pass# 第1步: 执行type的 __call__ 方法# 1.1 调用 Foo类(是type的对象)的 __new__方法,用于创建对象。# 1.2 调用 Foo类(是type的对象)的 __init__方法,用于对对象初始化。obj = Foo()# 第2步:执行Foo def __call__ 方法obj()


"""

元类相关(type & metaclass)

原文地址:https://www.cnblogs.com/ugfly/p/8269205.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved