metaclass : 元类, 就是创建python类对象的类

# 便用type动态创建类

# 1. 使用type创建一个User类对象  无基类,无属性 . () : 表示基类,  {}:属性
User = type('User', (), {})
user = User()
print(user) # <class '__main__.User'> # 2. 创建一个user对象,且带有一个name属性 User = type('User', (), {'name': '小强'})
user = User()
print(user.name) # 小强 # 3. 创建一个user对象,且带有一个name属性 和一个say方法 def say(self): # 这里一定要加个self, 否则报错
return 'i am say' User = type('User', (), {'name': '小强', 'say': say})
user = User()
print(user.say()) # i am say # 4. 创建一个User类,且还有个基类 class BaseUser:
def kk(self):
return 'i am base class' User = type('User', (BaseUser,), {'name': '小强'})
user = User()
print(user.kk()) # i am base class # 5. 元类,创建类的类
# 自定义一个元类,. 继承type即可
class MetaClass(type):
def __new__(cls, *args, **kwargs):
print('invoke MetaClass __new__')
return super().__new__(cls,*args, **kwargs) # 这样子会通过MetaClass创建User类对象, 如果找不到metaclass ,就是调用内置的type创建User类对象
class User(metaclass=MetaClass):
"""
User类继承了metaclass,那么就相当于将__new__这个方法委托给了metaclass
""" def __init__(self,name):
self.name = name
def __str__(self):
return self.name # 实例化一个user对象时,会先调用MetaClass的__new__方法,再调用User类的__init__
user = User(name="小马")

最新文章

  1. JavaScript学习笔记(二)——闭包、IIFE、apply、函数与对象
  2. DELPHI实现百度开放平台
  3. C语言程序设计第4堂作业
  4. C++模板元编程(C++ template metaprogramming)
  5. angular JS 做分页
  6. MongoDB 用户配置
  7. 众神看过来:IE11下鼠标中键(滚轮)导致的一个似乎无法解决的问题?!
  8. 第二百六十九天 how can I 坚持
  9. PHPExcel导出excel
  10. 【Windows 8 Store App】学习三:HTTP
  11. 手机浏览器无法获取COOKIE的原因
  12. 安装 svn
  13. React Native技术做的一个项目“微笑阅读”
  14. 搭建 keras + tensorflow
  15. Linux exec与文件描述符
  16. NLP+VS︱深度学习数据集标注工具、方法摘录,欢迎补充~~
  17. Solution for link error:Cannot Open File &#39;python27_d.lib&#39;
  18. s21day13 python笔记
  19. 三种进程和线程数据共享模块方法Queue》Pipe》manager
  20. SQL注入之PHP-MySQL实现手工注入-字符型

热门文章

  1. C#SQL小结
  2. TiDB配置HAProxy负载均衡
  3. vue--综合组件间的通信
  4. python2与3版本的编码问题
  5. 秒懂Vuejs、Angular、React原理和前端发展历史
  6. java基础笔记(6)
  7. [luogu5339] [TJOI2019]唱、跳、rap和篮球(容斥原理+组合数学)(不用NTT)
  8. 题解 AT1877 【回文分割】
  9. redis 教程(一)-基础知识
  10. 为什么要用消息队列 及 自己如何设计一个mq架构