Python自定义元类的实例讲解
作者:小妮浅浅 发布时间:2021-12-31 13:13:36
标签:Python,自定义元类
1、说明
一个类没有声明自己的元类,默认他的元类就是type,除了使用元类type,用户也可以通过继承type来自定义元类。
2、实例
我们可以使用类属性 __metaclass__ 把一个类的创建过程,转交给其它地方。
class A(object):
__metaclass__ = ... # 这个类的创建转交给其他地方
pass
先定义了类 A,然后定义了一个类属性 __metaclass__,这个属性表示创建类 A 的过程,转交给其它地方处理。
类属性 __metaclass__ 可以是一个方法,也可以是一个类。
内容扩展:
用元类创建类
前面讲到过,type 有一个作用是用于检查对象的类型,其实它还有另外一个作用就是作为元类动态地创建类(对象)。
>>> Person = type("Person", (), {"live":True})
>>> Person
<class '__main__.Person'>
Person 就是一个类,它等价于:
>>> class Person:
... live = True
...
>>> Person
<class '__main__.Person'>
用元类 type 创建类的语法是:
type(类名,基类元组(可以为空), 属性字典)
来源:https://www.py.cn/jishu/jichu/27876.html
0
投稿
猜你喜欢
- 不知上过ChinaRen校友录的朋友们有没有注意,ChinaRen在改版后很多方面都进行了较大的改动。例如留言与回复方面已经不再像以前那样,
- 一个很普通的网页中显示LOGO图像,按照以往的页面制作经验,基本是在页面中插入图像即可(<img src="logo.gif
- 本文实例讲述了Python中random模块用法。分享给大家供大家参考。具体如下:import randomx = random.randi
- 做设计的时候,如何配色是经常让人头痛的问题,尽管很多时候,很多人都说对于色彩的掌握更多的是靠感觉,但是不得不说,感觉也是要有依据的。所以颜色
- 一、Tornado简介Tornado是一个使用Python编写的高效、非阻塞的web服务器软件和网络库。它被设计用于处理数以千计的并发连接,
- 问题你写了一个装饰器作用在某个函数上,但是这个函数的重要的元信息比如名字、文档字符串、注解和参数签名都丢失了。解决方案任何时候你定义装饰器的
- 一、读取Excel中的数据安装xlrd 只能读取Excel内容pip install xlrd==1.2.0xlrd库的open_workb
- 直接看代码: 代码如下:Class GoogleTranslator sub Class_Initialize
- 本文实例讲述了Python实现简单状态框架的方法。分享给大家供大家参考。具体分析如下:这里使用Python实现一个简单的状态框架,代码需要在
- 本文实例讲述了Python编程生成随机用户名及密码的方法。分享给大家供大家参考,具体如下:方案一:import randomglobal u
- 因为要用到过滤一组中重复的数据,使之变成没有重复的一组数据的功能,百度了一下,居然有朋友乱写,而且比较多,都没有认真测试过,只对字符可以,但
- 有时候我们需要将一个对象的某些属性选取出来,比方说我们有一个用数组表示的数据库表,我们需要一些函数来 select (选取) 几个字段:fu
- 一、函数介绍pytorch中两个张量的乘法可以分为两种:两个张量对应元素相乘,在PyTorch中可以通过torch.mul函数(或*运算符)
- 一.GUI(Graphical User Interface(图形用户接口))1.导入需要用到的包import tkinter as tki
- Web标准的web UI——来源、谬误与个人理解序我从2004年末开始接触web标准,2005年5月正式采取完全的web标准方式的网页制作,
- IE历来被web标准的拥护者所诟病,而当FireFox横空出世以后,更多的网页制作者开始关注web标准设计。看着FireFox的市场占有率不
- 问:我最近升级了一个应用程序,使其可以在 SQL Server 2005 上运行。我利用了允许行长度超出 8,060 个字节这项功能,以便用
- python的基础练习案例——名片管理系统,一个控制台程序的案例练习,平台为pycharm2017。代码是看着python视频学的时候写的,
- 一段非常简单代码普通调用方式def console1(a, b): print("进入函数")
- reload() 简介作用:用于重新载入之前载入的模块语法格式:reload(module)参数:module为模块对象,必须已经被加载返回