#类也是对象,type创建类的类def create_class(name): ???if name == "user": ???????class User: ???????????def __str__(self): ???????????????return "user" ???????return User ???elif name == "company": ???????class Company: ???????????def __str__(self): ???????????????return "company" ???????return Company#type动态创建类# User = type("User", (), {}) #名称,继承(要继承的base类),属性或方法(但是要字典形式)def say(self): ???return "i am user" ???# return self.nameclass BaseClass(): ???def answer(self): ???????return "i am baseclass"class MetaClass(type): #继承type为元类 ???def __new__(cls, *args, **kwargs): ???????return super().__new__(cls, *args, **kwargs)from collections.abc import *#什么是元类, 元类是创建类的类 对象<-class(对象)<-typeclass User(metaclass=MetaClass): ???def __init__(self, name): ???????self.name = name ???def __str__(self): ???????return "user"#python中类的实例化过程,会首先寻找metaclass,通过metaclass去创建user类#type去创建类对象,实例if __name__ == "__main__": ???# MyClass = create_class("user") ???# my_obj = MyClass() ???# print(type(my_obj)) ???# User = type("User", (BaseClass, ), {"name":"user", "say":say}) ???my_obj = User(name="bobby") ???print(my_obj)
元类编程-- metaclass
原文地址:https://www.cnblogs.com/Erick-L/p/8883614.html