006 元类小测试

  1. 自定义一个元类,控制类的产生,类的名称空间中必须有name字段才能创建成功,否则失败
    class Mymeta(type):
        def __init__(self, class_name, class_bases, class_dic):
            if 'name' not in class_dic:
                raise TypeError('类名必须加"name"')
            super(Mymeta, self).__init__(class_name, class_bases, class_dic)
    class People(metaclass=Mymeta):
        # name = 'nick'
        def __init__(self, age):
            self.age = age
    lbm = People(19)
    print(lbm.age)
    
  2. 自定义一个元类,定义一个类,继承字典,使其具备点取值和赋值功能,通过元类控制对象的产生,把所有对象的属性都放到attr字典中,属性全删除
    例如:Mydict(name = 'lqz', age = 18)
    实例化对象的名称空间没有name和age属性,但是有attr:字典属性,字典内包含{'name':'lqz', 'age':18}'
    duixinag.__dict__'   {attr:{'name':'lqz', 'age':18},}
    class myclass(type):
        def __call__(self, *args, **kwargs): #空对象
            obj = self.__new__(self)  #定制
            obj['attr'] = kwargs
            #obj['attr'] = {i:v for i,v in kwargs.items()}
            return obj
    class son(dict,metaclass=myclass):
        def __init__(self, **kwargs):
            super().__init__(**kwargs)
        def __getattr__(self,item):
            return self[item]
        def __setattr__(self, key, value):
            self[key] = value
    obj = son(name = 'tom',age = 20,)
    print(obj)
    

https://www.cnblogs.com/abdm-989/p/11453773.html

原文地址:https://www.cnblogs.com/abdm-989/p/11455978.html