在阅读Django文档时,我在示例中看到了这一点:
from django.db import models
class HandField(models.Field):
description = "A hand of cards (bridge style)"
def __init__(self, *args, **kwargs):
kwargs['max_length'] = 104
super(HandField, self).__init__(*args, **kwargs)我不明白为什么给超级主管的电话是:
super(HandField, self).__init__(*args, **kwargs)而(来自C编程的)我认为应该是:
super(HandField, self).__init__(args, kwargs)怎么来的?
是。我不是在问"*“和"**”(链接标记为“复制”)是什么意思,我是在问为什么在没有的情况下不重新发送--=为什么它被重新发送给父母和星星,这对我来说意味着:“字典的字典”。我的问题和重复链接不同,重复链接不回答我的问题。
发布于 2016-01-27 18:45:22
使用*/**的原因是要解压给定的打包值。初始化类时,可以使用以下方法初始化:
HandField(1, 2, 3, abc=4, xyz=5)由于它使用可变长度位置(*)和动态关键字(**)参数接收参数(避免需要记住和处理父类构造函数接收的细节),所以args被接收为(1, 2, 3),kwargs是{'abc': 4, 'xyz': 5}。如果父类定义为:__init__:
def __init__(self, a1, a2, a3, spam=6, eggs=7, abc=None, xyz=None):然后调用super(HandField, self).__init__(args, kwargs)将传递args tuple为a1,kwargs dict为a2,而对a3或其他参数则不传递任何内容。通过kwargs,您可以转换回单个位置和关键字参数,这样a1就可以得到1、a2 2、a3 3、abc 4和xyz 5。
基本上,它们是逆操作;如果您接受*,那么调用方将一个接一个地传递位置参数,并将它们“打包”到单个tuple中,接受**接受单个关键字参数“打包”为单个dict。如果您想以同样的方式传递它们,您可以“解压”它们,使它们成为单独的参数,而不是参数的集合。
https://stackoverflow.com/questions/35043912
复制相似问题