当前位置:首页 > Web开发 > 正文

metaclass简单使用

2024-03-31 Web开发

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="小马")

metaclass简单使用

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/40334.html