作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在Django的源码中,有**kwargs
和**initkwargs
。 django/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/
在Django的源码中,有**kwargs和**initkwargs。 django/base.py at master · django/django class View: def __i
我是一名优秀的程序员,十分优秀!