zoukankan      html  css  js  c++  java
  • 元类编程-- metaclass

    #类也是对象,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.name
    
    
    class 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(对象)<-type
    class 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)
  • 相关阅读:
    MEF 根据配置注入Service
    .Net创建windows服务入门
    MySQL中MAX函数与Group By一起使用的注意事项(转)
    .net core 跨平台实践
    python中的迭代器和生成器
    python抓取链家房源信息(二)
    scrapy抓取小说
    python的scrapy框架
    总结
    python抓取链家房源信息
  • 原文地址:https://www.cnblogs.com/Erick-L/p/8883614.html
Copyright © 2011-2022 走看看