gpt4 book ai didi

python - 在 (*args, **kwargs) python 中处理参数初始值的简单方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 19:17:16 27 4
gpt4 key购买 nike

基类看起来像这样(代码来自 Django,但问题不是 Django 特定的):

class BaseModelForm(BaseForm):
def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
initial=None, error_class=ErrorList, label_suffix=':',
empty_permitted=False, instance=None):

class ModelForm(BaseModelForm):
__metaclass__ = ModelFormMetaclass

派生类如下所示:

class MyForm(forms.ModelForm):
def __init__(self, data=None, files=None, *args, **kwargs):
super(EdocForm, self).__init__(data, files, *args, **kwargs)
self.Meta.model.get_others(data, files, kwargs.get('instance', None))

如果编码器将实例作为 kwargs 传递,这一切都很好并且应该可以工作,但是如果他们不这样做并将其传递到 args 中怎么办?在处理 *args 和 **kwargs 时,提取 instance 的合理方法是什么?诚然,在这种情况下,实例出现在 args 中的机会很小,但如果它是第三个参数而不是第五个(不包括 self)。

最佳答案

在 django 中,如果实例未传递或未正确设置,则它将变为 None,然后 init 将为您创建一个新实例 http://docs.nullpobug.com/django/trunk/django.forms.models-pysrc.html#BaseModelForm但这不是你的问题。如果其他变量未正确设置,则可能会引发异常。

如果你想检查用户是否正确使用了你的 API,这真的取决于你,在 Python 中这可能相当令人畏惧,而且检查实例类型并不是很 Pythonic,尽管存在非常激烈的争论关于拥有如此动态类型的语言是好事还是坏事的网络。一方面,您可以使用动态类型语言非常高效,另一方面,您可能会遇到非常讨厌的错误,其解决方案并不那么明显,但这是我自己的经验。

我相信一致性是系统可以拥有的最重要的事情之一,因此我倾向于总是使用关键字值,全部设置为“无”,然后简单地进行断言以确保所需的所有内容都不是“无”,你可以有一个函数来检查你的参数是否正确。根据我自己的经验,关键字参数往往是最灵活的,因为您不需要跟踪顺序,而是通过让被调用者记住其名称来付出代价。

如果你确实需要“实例”,那么你可以使用 isinstance 迭代 args 和/或 kwargs 来获取实例变量,尽管就像我说的那样,这不是很 Pythonic....

关于python - 在 (*args, **kwargs) python 中处理参数初始值的简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10958248/

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