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)
  • 相关阅读:
    window.open跨页面传输
    history对象
    类vr特效的360度全景
    移动端图片滑动
    图片拼图
    20180808 考试记录
    [jzoj 5770]【2018提高组模拟A组8.6】可爱精灵宝贝 (区间dp)
    20180806 考试记录
    [luogu2319 HNOI2006] 超级英雄 (匈牙利算法)
    [luogu2679] 子串 (多维dp)
  • 原文地址:https://www.cnblogs.com/Erick-L/p/8883614.html
Copyright © 2011-2022 走看看