2

これは、Flask の質問というよりも、Python に関する一般的な質問です。

このコード スニペットはhttps://github.com/mitsuhiko/flask/blob/master/flask/views.py#L18からのものです。

@classmethod
def as_view(cls, name, *class_args, **class_kwargs):
    """Converts the class into an actual view function that can be used
    with the routing system.  Internally this generates a function on the
    fly which will instantiate the :class:`View` on each request and call
    the :meth:`dispatch_request` method on it.

    The arguments passed to :meth:`as_view` are forwarded to the
    constructor of the class.
    """
    def view(*args, **kwargs):
        self = view.view_class(*class_args, **class_kwargs)
        return self.dispatch_request(*args, **kwargs)

    if cls.decorators:
        view.__name__ = name
        view.__module__ = cls.__module__
        for decorator in cls.decorators:
            view = decorator(view)

    # we attach the view class to the view function for two reasons:
    # first of all it allows us to easily figure out what class-based
    # view this thing came from, secondly it's also used for instantiating
    # the view class so you can actually replace it with something else
    # for testing purposes and debugging.
    view.view_class = cls
    view.__name__ = name
    view.__doc__ = cls.__doc__
    view.__module__ = cls.__module__
    view.methods = cls.methods
    return view

as_view()メソッドのコメントで説明されているように、この関数が引数をViewクラスのコンストラクターに転送する方法を誰かが正確に説明できますか?

直接的な説明ではないにしても、何が起こっているのかをよりよく理解するために、Pythonに関して特に何を学ぶ必要があるかについて、正しい方向に突き進んでいるかもしれません。

ありがとう

4

1 に答える 1

3

この行が重要です。

self = view.view_class(*class_args, **class_kwargs)

に渡された引数を取得し、as_viewそれらを使用してそれらの引数を持つ のインスタンスを作成してviewいます。

于 2013-03-07T20:35:36.497 に答える