gpt4 book ai didi

django - `**kwargs`和 `**initkwargs`的功能区别

转载 作者:行者123 更新时间:2023-12-04 17:48:16 24 4
gpt4 key购买 nike

在Django的源码中,有**kwargs**initkwargsdjango/base.py at master · django/django

class View:

def __init__(self, **kwargs):
"""
Constructor. Called in the URLconf; can contain helpful extra
keyword arguments, and other things.
"""
# Go through keyword arguments, and either save their values to our
# instance, or raise an error.
for key, value in kwargs.items():
setattr(self, key, value)

    @classonlymethod
def as_view(cls, **initkwargs):
"""Main entry point for a request-response process."""
for key in initkwargs:
if key in cls.http_method_names:
raise TypeError("You tried to pass in the %s method name as a "
"keyword argument to %s(). Don't do that."
% (key, cls.__name__))

它们在使用上有什么区别?

最佳答案

虽然 kwargs 是约定俗成的名字,但它被称为 initkwargs 的主要原因是为了避免名称冲突:

@classonlymethod
def as_view(cls, **initkwargs):
"""Main entry point for a request-response process."""
...

def view(request, *args, **kwargs): # defines kwargs
self = cls(**initkwargs) # uses initkwargs
...
return self.dispatch(request, *args, **kwargs)
...
return view

请注意,内部 view 函数采用 **kwargs 参数。如果类方法使用相同的名称,内部的 **kwargs 将覆盖外部的 **kwargs,函数将无法访问外部的 kwargs 在实例化 cls 时。

使用名称 initkwargs 可以避免这个问题。

关于django - `**kwargs`和 `**initkwargs`的功能区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47226201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com