欢迎各位兄弟 发布技术文章
这里的技术是共享的
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 是元类对象 也就是类