当前位置: 首页 > news >正文

兰州建设网站公司干煤棚网架公司

兰州建设网站公司,干煤棚网架公司,网络营销模式有哪些类型,wordpress 商品插件元类 “元类就是深度的魔法#xff0c;99%的⽤户应该根本不必为此操⼼。 如果你想搞清楚 究竟是否需要⽤到元类#xff0c;那么你就不需要它。 那些实际⽤到元类的⼈都⾮常 清楚地知道他们需要做什么#xff0c;⽽且根本不需要解释为什么要⽤元类。“——蒂姆彼得斯TimPeter…元类 “元类就是深度的魔法99%的⽤户应该根本不必为此操⼼。 如果你想搞清楚 究竟是否需要⽤到元类那么你就不需要它。 那些实际⽤到元类的⼈都⾮常 清楚地知道他们需要做什么⽽且根本不需要解释为什么要⽤元类。“——蒂姆·彼得斯TimPeters 什么是元类 在python中所有的类都是基于元类创建的。 class demo(object):pass在python中一切都是对象类也是对象所以一个类必定会有一个类型。 此处的object是所有python类层次结构的基类也就是说所有的类都是继承它的。 那么object又是什么类型 print(type(object))我们打印出来看一下 class type显示的就是元类。 我们回到前面说的那句话再加上注解会更容易理解了。 在python中一切都是对象(object)类(class)也是对象(object)所以一个类(class)必定会有一个类型(type)。用来创建类的类叫做元类函数type实际上也是一个元类。python中任何形式类以及python3中的任何类都是type元类的一个实例。 需要注意的是我们要区分元类和继承的基类 type是元类所有的类都是通过type所创建出来的object顶层的基类所有类的继承顶层父类都是objecttype是创造者女娲object是女娲创造的第一个孩子。不是很准确但这样好理解 参数详解 type源码 class type(object):type(object_or_name, bases, dict)type(object) - the objects typetype(name, bases, dict) - a new type源码中写道使用type(name, bases, dict)就可以定义一个新的元类。 参数详解 name 表示要创建的类的名称。字符串类型 bases : 继承类的基类元组或包含基类的元类。元组类型 dict : 类属性和方法。字典类型 自定义类与元类创建的比对 我们自己创建类代码如下 class MyClass(object):x 42obj MyClass() print(obj.x) # 输出42这里类名为MyClass继承了基类object属性为x42 那么我们就按照元类创建类的方式构造一个和如上类一样功能的类。 MyClass type(MyClass,(object,),{x:42}) obj MyClass() print(obj.x) #输出42由于object是默认继承的基类bases参数可以为空代码如下 MyClass type(MyClass,(),{x:42}) obj MyClass() print(obj.x) #输出42既然我们可以自己创建类为什么要用元类 别问问就回去文章开头TimPeters说的那句话。 深入一下 经过上面的例子我们知道了object是所有类的基类而type是创建类的类那么我如果把基类修改了是不是创建出来的类就是自动继承了我所修改后的基类 定义一个元类 声明一个类并继承自type类。在元类中定义__new__方法该方法用于创建新的类。在__new__方法中可以自定义类的行为、属性和方法。 class MyMeta(type):def __new__(meta, name, bases, attrs):# 自定义类的行为print(想不到吧我才是基类)# 创建并返回新的类return super().__new__(meta, name, bases, attrs)使用元类动态创建类 在创建类时可以使用metaclass参数指定所使用的元类。 声明一个普通的类并将metaclass参数设置为定义的元类metaclass默认为type class MyClass(metaclassMyMeta):# 类的定义hh 123print(呜呜呜我就是一个普通的类,可我的元类不是type了而是自定义的)运行以上代码 aa MyClass() print(aa.hh) #输出结果如下 呜呜呜我就是一个普通的类,可我的元类不是type了而是自定义的 想不到吧我才是基类 123如果我们没有指定元类为自定义的元类输出将会没有想不到吧那一行。 class MyClass2():# 类的定义h 123print(呜呜呜我就是一个普通的类,可我的元类不是type了而是自定义的)aa MyClass2() print(aa.h) #输出结果如下 呜呜呜我就是一个普通的类,可我的元类不是type了而是自定义的 123用元类写一个简单的日志记录器 class LogMeta(type):def __new__(meta, name, bases, attrs):# 检查属性中的日志消息logs {}for key, value in attrs.items():if isinstance(value, str) and value.startswith(LOG ):logs[key] value# 添加日志方法for key in logs.keys():def log_func(self, message):print(fLog {key}: {message})attrs[key] log_func# 创建并返回新的类return super().__new__(meta, name, bases, attrs)class MyLogger(metaclassLogMeta):LOG_INFO LOG INFOLOG_ERROR LOG ERRORLOG_WARNING LOG WARNING 在上面的示例中我们创建了一个LogMeta元类它通过检查类属性中的日志消息并动态创建日志方法。然后我们使用LogMeta元类创建了一个MyLogger类并在其中定义了几个日志消息。最后我们可以使用MyLogger类创建对象并调用日志方法。 logger MyLogger() logger.LOG_INFO(This is an informational message.) logger.LOG_ERROR(An error occurred.)当我们运行上面的代码时它将输出以下内容 Log LOG_WARNING: This is an informational message. Log LOG_WARNING: An error occurred.下一节我们讲讲如何将它运用在我们的测试框架里面动态创建测试用例。
http://www.yutouwan.com/news/265155/

相关文章:

  • 东莞网站推广优化搜索推广网站建设中需求分析报告
  • 做网站需要什么人员百度热搜榜单
  • 兰州网站制作要多少钱静态网页模板源代码
  • 产品网站设计论文做网站应聘平台
  • 天津做淘宝网站杭州 兼职 网站建设
  • 简述对网站进行评析的几个方面.网页设计与制作教程代码
  • 网站运营方案书广告制作安装工
  • 南阳网站建站公司wordpress 栏目设置
  • 网站排名软件推荐做网站时怎样申请域名
  • 给素材网站做素材方法网站是否备案怎么查询
  • 两学一做知识问答网站高清做网站插图
  • 怎么注册com网站免费的黄山旅游攻略自由行
  • 网站公众号信息化建设工作计划企业网站相关案例
  • 封面上的网站怎么做宁德网
  • 微信公众商城网站开发网站建设服务那一个便宜
  • asp.net网站模板免费下载wordpress制作公司主页
  • 帮别人做视频剪辑的网站游戏工作室招聘信息
  • 网站备案 论坛网站建设电子书资料
  • 无锡网站设计网站重庆长寿网站设计公司哪家好
  • 珠宝网站建商台北做外贸网站需要什么
  • 做网站需要什么证明嘛湖南3合1网站建设电话
  • 电器工程东莞网站建设网站建设方案设计ppt
  • 网站分离怎么做wordpress火车头采集教程
  • 做加工都在哪个网站推广企业展厅布置效果图大全
  • 长沙网站改版阿里关键词排名查询
  • div做网站网站做成微信小程序
  • 个人网站一年多少钱淘宝客网站建站源码
  • 如何快速找到公司网站卧龙区2015网站建设价格
  • 鄂州网站建设企业推广广告网站推荐
  • 高效的宝安网站推广做网站的算什么行业