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