欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

自己测试做的 关于 metaclass的例子 有大用

shiping1 的头像



class ModelMetaclass(type):
    '''
    Metaclass for model objects.
    '''
    def __new__(cls, name, bases, attrs):
        # skip base Model class:
        if name=='Model':
            return type.__new__(cls, name, bases, attrs)

        # store all subclasses info:
        if not hasattr(cls, 'subclasses'):
            cls.subclasses = {}
        if not name in cls.subclasses:
            cls.subclasses[name] = name
        else:
            logging.warning('Redefine class: %s' % name)
        
        print cls
        print id(cls)
        print attrs
        return type.__new__(cls, name, bases, attrs)
class  Model():
    __metaclass__ = ModelMetaclass

class User(Model):
    id = 5
    pass
class Post(Model):
    name = 'shipingzhong'
    pass
class  Model2():
    __metaclass__ = ModelMetaclass
    password = "admin"
 发现一个现象 就是通过 metaclass 来创建类的时候 元类对象上其实是同一个对象 因为id(元类对象) 的值是相等的 但是 attrs 随着各个不同的类 而不相等 再换句话说 也许在 调用__new__时 已经清除掉上次的 attrs 了  还有 cls 是元类对象 也就是类

普通分类: