您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

Django中的元类

2024/6/30 15:01:17发布19次查看
看django(1.6)的form相关源代码时比较迷惑,于是节选了django.forms.forms.py中的几个代码片段来分析django中是怎么使用元类的:
def with_metaclass(meta, *bases): create a base class with a metaclass. return meta(newbase, bases, {}) class declarativefieldsmetaclass(type): def __new__(cls, name, bases, attrs): print('cls: %s, name: %s, bases: %s ,attrs: %s\n' % (cls, name, bases, attrs)) new_class = super(declarativefieldsmetaclass, cls).__new__(cls, name, bases, attrs) # new_class._meta = '123' return new_class class baseform(object): pass class form(with_metaclass(declarativefieldsmetaclass, baseform)): pass class myform(form): a = 1 b = 2
加载上面的python模块,控制台会输出:
cls: , name: newbase, bases: (,), attrs: {}
cls: , name: form, bases: (,), attrs: {'__module__': '__main__'}
cls: , name: myform, bases: (,), attrs: {'a': 1, '__module__': '__main__', 'b': 2}
虽然没有直接在代码中为myform指定metaclass,但由于myform继承自form,而form继承自declarativefieldsmetaclass生成的类名为newbase的类,所以declarativefieldsmetaclass实际上就是myform的metaclass。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product