Django 签名不同于overidden';保存';方法,pylint(签名不同)

Django 签名不同于overidden';保存';方法,pylint(签名不同),django,methods,overriding,signature,Django,Methods,Overriding,Signature,我能得到一些帮助来理解pylint消息签名与pylint(签名不同)所指的overidden“save”方法的区别吗 def save(self, *args, **kwargs): """ Override the original save method and update the number of seats available """ reservations = (

我能得到一些帮助来理解pylint消息签名与pylint(签名不同)所指的overidden“save”方法的区别吗

def save(self, *args, **kwargs):
    """
    Override the original save method and update the number of
    seats available
    """
    reservations = (
        Booking.objects.aggregate(
            num_passengers=Count("passengers")
        )
        ["num_passengers"] or 0
    )
    self.seats_available = self.destination.max_passengers - reservations
    super().save(*args, **kwargs)
“如果在方法定义中使用*args、**kwargs,则可以保证在添加这些参数时,代码将自动支持这些参数。”


我不完全理解签名是如何工作的,但我的理解是,这与确保参数匹配有关。在这种情况下,我认为我没有改变默认的保存方法……那么,是什么导致了这个问题呢?

我刚刚遇到这个问题,并一直试图自己解决这个问题。我不明白确切的细节,但我相信我找到了一般的理由

基本上,
def保存(self,*args,**kwargs)
保存的限制性更小:

您会注意到,如果从文档中复制并粘贴
save
方法中的参数,而不是
*args,**kwargs
错误就会消失

这是因为从理论上讲,使用
*args、**kwargs
作为参数可以将额外的参数传递到方法中,从而使其违反(请参见一个清晰的示例)。替换中的参数必须等于或比父方法更严格。它们不应该允许您传递额外的参数

然而,在实践中,Django永远不会这样做,除非你自己编写代码,所以我认为在这种情况下,作为一个警告,它相对来说并不重要。我想Django开发人员推荐速记
*args,**kwargs
,因为它更容易在许多方法中用作替代,而不必记住每个单独类或方法的特定参数。我想它属于Python风格指南的一个建议

希望能有所帮助

def save(self, force_insert=False, force_update=False, using=None,
          update_fields=None)