博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
metaclass--元类
阅读量:7180 次
发布时间:2019-06-29

本文共 1344 字,大约阅读时间需要 4 分钟。

hot3.png

metaclass--元类

除了使用type()动态创建类以外,要控制类的创建行为,还可以使用metaclass。 metaclass,直译为元类,简单的解释就是:

当我们定义了类以后,就可以根据这个类创建出实例,所以:先定义类,然后创建实例。

但是如果我们想创建出类呢?那就必须根据metaclass创建出类,所以:先定义metaclass,然后创建类。

连接起来就是:先定义metaclass,就可以创建类,最后创建实例。

所以,metaclass允许你创建类或者修改类。换句话说,你可以把类看成是metaclass创建出>来的“实例”。

元类特性

一、下面代码展示了元类可以创建类.以及元类的常用写法:

class Hello:    passclass Base(type):    def __new__(cls, name, bases, attrs):        print(f"cls:{cls}")        print(f"name:{name},type:{type(name)}")        print(f"bases:{bases},type:{type(bases)}")        print(f"attrs:{attrs},type:{type(attrs)}")        print("=" * 50)        return type.__new__(cls, name, bases, attrs)class World(metaclass=Base):    passclass User(World):    def say(self):        passprint("-" * 50)print(f"Hello-type:{type(Hello)}")print(f"World-type:{type(World)}")"""cls:
name:World,type:
bases:(),type:
attrs:{'__module__': '__main__', '__qualname__': 'World'},type:
==================================================cls:
name:User,type:
bases:(
,),type:
attrs:{'__module__': '__main__', '__qualname__': 'User', 'say':
},type:
==================================================--------------------------------------------------Hello-type:
World-type:
"""

转载于:https://my.oschina.net/u/2474096/blog/2993980

你可能感兴趣的文章
主流 SSM 框架Java 后台 springmvc mybatis 有代码生成器
查看>>
vue点击当前路由,如何实现刷新当前页
查看>>
iOS 常用布局方式之Constraint
查看>>
初识zookeeper和安装
查看>>
test
查看>>
【Camera专题】-Camera帧率、黄光环境下拍照闪红问题-【展讯平台】
查看>>
Android NDK 环境搭建 之 起始篇NDK HelloWorld
查看>>
this指向问题
查看>>
对 python 中变量值交换的一些思考
查看>>
iOS 数据优化之处理HTML字符串
查看>>
vue.js无缝滚动
查看>>
if和switch的效率
查看>>
学Java的,想尝试转行大数据和数据挖掘,该怎么规划学习?
查看>>
短视频开发的基石,短视频源码的重要性
查看>>
[译] 超快速的分析器(一):优化扫描器
查看>>
面试必备技能之服务限流
查看>>
基本数据类型和引用数据类型——JS基础学习笔记(三)
查看>>
Golang 10行代码,搞定对外提供 OpenAPI
查看>>
JDK源码中的一些“小技巧”
查看>>
使用Gradle做Java代码质量检查
查看>>