Python 进阶
Python 协程实现原理
dict 和 set 实现原理
Python 线程安全
Python 抽象语法树(AST)
Python 日志输出
Python 扩展入门(一)
Python 程序执行原理
Python 垃圾回收
Python 动态创建类
检查工具
PyFrameObject
yield 生成器工作原理
dict 设计与实现
Python 性能分析原理
PyCodeObject
Python 弱引用
Python 性能分析原理(二)
Python 源码分析(一)
Python Annotated
Python 依赖注入
python freelist
python代码编译成pyc
Python mmap 内存映射文件
Python值得学习的内容
async Future 对象
asyncio loop的实现
asyncio.sleep 的实现
asyncio 原理
Python 代码加密
Python Token类型
Python 扩展入门(二)
Python 性能优化
本文档使用 MrDoc 发布
-
+
首页
Python 动态创建类
在Python中,可以使用`type`和`metaclass`动态创建类 ### 使用type动态创建类 我们知道动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的。比如说我们要定义一个Person类: ``` class Person(object): def name(self, name='Kaven'): print('My name is: %s.' % name) p = Person() p.name() print(type(Person)) print(type(p)) ``` 输出: ``` My name is: Kaven. <class 'type'> <class '__main__.Person'> ``` **实际上,class的定义是运行时动态创建的,而创建class的方法就是使用type()函数。** `type()`函数既可以返回一个对象的类型,又可以创建出新的类型,比如,我们可以通过`type()`函数创建出Person类,而无需通过`class Person`的定义: ``` def func(self, name='Kaven'): # 自定义函数 print('My name is: %s.' % name) Person = type('Person', (object,), dict(name=func)) # 创建Person class h = Person() print(h.name()) print('type(Person) =', type(Person)) print('type(h) =', type(h)) ``` 输出: ``` My name is: Kaven. type(Person) = <class 'type'> type(h) = <class '__main__.Person'> ``` 要创建一个class对象,`type()`函数依次传入3个参数: - **class的名称;** - **继承的父类集合,注意Python支持多重继承,如果只有一个父类,使用tuple的单元素写法;** - **class的方法名称与函数绑定,这里我们把函数func绑定到方法名name上;** ### 总结 通过`type()`函数创建的类和直接写class是完全一样的,因为Python解释器遇到class定义时,仅仅是扫描一下class定义的语法,然后调用type()函数创建出class。 ### 参考 > [Python中使用type、metaclass动态创建方法和属性](https://www.cnblogs.com/phpper/p/10627838.html)
gaojian
2024年9月11日 08:52
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
关于 MrDoc
觅思文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果觅思文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护觅思文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
Markdown文件
分享
链接
类型
密码
更新密码