• 技术文章 >后端开发 >Python教程

    Django中的元类

    高洛峰高洛峰2016-10-17 14:03:10原创906
    看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。


    php入门到就业线上直播课:查看学习

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:Django中的元类
    上一篇:Python六大框架对比,Web2py略胜一筹 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• Python NumPy教程之数据类型对象• 使用Python处理KNN分类算法• Python标准库中的logging用法示例• python发腾讯微博代码分享• 浅谈Python的Django框架中的缓存控制
    1/1

    PHP中文网