Python 方法传参详解

news2024/12/22 20:30:28

参数

位置参数 和关键字参数

  • data={'error': str(e)}:传递给了 __init__ 方法中的 data 参数,表示需要返回给客户端的 JSON 数据。
  • status=500:通过 **kwargs 传递给了父类 HttpResponse,并设置了响应状态码为 500。

  • 位置参数 和关键字参数:在 Python 中,函数可以接受位置参数(data)和关键字参数(status)。关键字参数允许你通过指定参数名来传递数据,比如 status=500。这与 Java 中参数传递的方式有所不同,Java 中函数的参数需要按照声明的顺序传递,除非使用了像 Builder 模式来模拟关键字参数。

  • {} 表示字典:在 Python 中,花括号 {} 用于创建字典,类似于 Java 中的 Map。而在 Java 中,如果要传递类似的键值对数据,可能会使用 HashMapTreeMap。因此,{'error': str(e)} 是一个字典,它会被 JsonResponse 序列化为 JSON。

参数详解

def __init__(
    self,                    # self 是实例
    data,                    # data 是第一个显式传递的参数
    encoder=DjangoJSONEncoder, # encoder 有默认值
    safe=True,               # safe 也有默认值
    json_dumps_params=None,  # json_dumps_params 也有默认值
    **kwargs,                # **kwargs 接受任意数量的关键字参数
):

为什么{'error': str(e)}不对应self,self不是一个位置参数吗?

在 Python 中,self 不是通过参数传递的,而是自动绑定给实例方法的第一个参数。它并不需要我们显式传递。因此,在调用 JsonResponse({'error': str(e)}, status=500) 时,self 已经隐式绑定给了当前 JsonResponse 类的实例。让我们详细解释一下:

1. self 参数解释

  • self 是 Python 类方法中的第一个参数,它指向类的实例,允许方法访问和修改该实例的属性。在调用类的方法时,我们并不显式传递 self,Python 会自动将实例对象传递给方法。

    举个例子,假设你有一个类 MyClass,其中有一个方法 my_method

class MyClass:
    def my_method(self, value):
        print(self, value)

obj = MyClass()
obj.my_method(5)  # 实际上相当于 MyClass.my_method(obj, 5)
  • 在上面的例子中,self 被自动绑定为 obj,因此你无需手动传递 self。同理,当你调用 JsonResponse 时,self 会自动绑定到 JsonResponse 的实例上。

    所以,当你调用 JsonResponse({'error': str(e)}, status=500) 时,self 代表创建的 JsonResponse 实例,自动传递,不用显式指定。

2. 为什么 status=500 对应 **kwargs 而不是 encoder=DjangoJSONEncoder

  • 这里关键是 关键字参数(keyword arguments)默认参数(default arguments) 的工作方式。
参数顺序

在 Python 中,参数的传递有一定的顺序,遵循以下规则:

  1. 位置参数(Positional arguments)
  2. 对应的关键字参数(Keyword arguments)
  3. 默认参数(Default arguments)
  4. 任意数量的关键字参数(**kwargs

当你调用 JsonResponse({'error': str(e)}, status=500) 时,参数是如何被映射的:

  1. 位置参数{'error': str(e)} 作为第一个位置参数传递给 data
  2. 关键字参数status=500 是一个关键字参数,没有明确列在方法签名中,因此它会被 **kwargs 捕获。
为什么 status=500 没有匹配 encoder
  • encoder 有一个默认值 DjangoJSONEncoder,它只会被覆盖 当且仅当 你显式传递 encoder 参数时(覆盖的就是对应的关键字参数)。
  • 因此,status=500 不会覆盖 encoder,因为你没有通过 encoder 参数传递它。
  • 由于 status 并没有与任何显式定义的参数匹配,它就会被 **kwargs 捕获,并最终传递给父类 HttpResponse,用来设置响应的状态码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2164702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

redis Redis-Cluster常用命令与Redis性能监控

起因:随着项目的进一步推广,数据量的增大,直接访问mysql数据库获取数据所使用的时间越来越长,为解决当前主要矛盾,决定引入redis非关系型数据库作为缓存层,使得数据并不能直接命中数据库,减少访…

重生之我在代码随想录刷算法第十三天 | 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和、222.完全二叉树的节点个数

参考文献链接:代码随想录 本人代码是Java版本的,如有别的版本需要请上代码随想录网站查看。 110.平衡二叉树 力扣题目链接 解题思路 这道题目刚看到以为和二叉树的最大深度差不多,上来写了一堆迭代求深度的代码结果发现不对劲。 看了题…

非标精密五金加工的技术要求

非标精密五金加工在现代制造业中占据着重要地位,其对于产品的精度、质量和性能有着较高的要求。以下是时利和整理的其具体的技术要求: 一、高精度的加工设备 非标精密五金加工需要先进的加工设备来保证加工精度。例如,高精度的数控机床是必不…

【越学学糊涂的Linux系统】Linux指令篇(2)

一、echo指令: ✔️✔️在终端中显示文本内容或向文件中写入文本 Ⅰ.基本用法: 0x00打印字符串: 打印字符串/显示文本内容;可以用双引号作为文本内容⬇️⬇️更推荐用单引号 这里我将字符串打印出来了。和printf的功能一样&…

【Linux实践】实验五:用户和组群账户管理

【Linux实践】实验五:用户和组群账户管理 实验目的实验内容实验步骤及结果1. 创建用户2. 切换用户3. 修改用户4. 删除用户5. 创建组群6. 修改组群补充:删除组群 实验目的 1、掌握字符界面下用户账户的设置,包括命令useradd、usermod、userde…

深入解析 Apache Kylin

以下是关于 Kylin 概述 部分的内容,你可以在技术博客中使用: 1. Kylin 概述 什么是 Apache Kylin? Apache Kylin 是一个开源的分布式分析引擎,主要为大数据场景下的 OLAP(Online Analytical Processing)提…

利用echarts 显示图片信息

当前有个需求,需要对其进行相关统计,这里我们采用jquery3.6 与echarts.js 做相关图表,不解释,直接上代码吧 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"wid…

被动元数据的不足和主动元数据的先进性

元数据管理领域&#xff0c;被动元数据管理主要执行的是一种基础且相对直接的任务&#xff0c;即简单地对元数据进行编目或存储。这一过程通常不涉及复杂的逻辑处理或动态分析&#xff0c;而是侧重于数据的静态描述和记录&#xff0c;如数据类型、结构、位置、创建时间等。 这…

【PG备份恢复】基于时间点的恢复(踩坑指南)

1 设置基于时间点恢复所需的配置 要启用WAL归档&#xff0c; 需设置wal_level配置参数为replica或更高&#xff0c;设置archive_mode为on&#xff0c;并且使用archive_command配置参数指定一个shell命令 1.1 修改配置文件 postgresql.conf vim postgresql.conf archive_…

资深老师都在用的成绩发布小程序,月考发成绩就用它!

在教育的长河中&#xff0c;老师们一直扮演着知识传递者的角色。然而&#xff0c;随着时间的流逝&#xff0c;教育的方式也在不断地革新。过去&#xff0c;老师们发布成绩查询的方式既繁琐又耗时。 现在我们有了更高效、更便捷的成绩发布方式。在众多的成绩查询系统中&#xff…

2.数据结构研究

计算机解决问题的步骤 线性表 树 图&#xff08;点线&#xff09;

电脑录屏软件免费版,四款宝藏软件揭秘

在这个数字化时代&#xff0c;无论是教学演示、游戏直播还是软件教程分享&#xff0c;电脑录屏都成为了我们日常生活中不可或缺的一部分。然而&#xff0c;面对市面上琳琅满目的录屏软件&#xff0c;如何选择一款既免费又功能强大的工具&#xff0c;成为了不少小伙伴的难题。今…

桌面专业版【ssh配置】

UOS统信SSH协议的简单使用方法。包含软件安装,服务启动及常见问题等内容。 文章目录 功能概述一、SSH安装二、SSH使用方法三、SSH常见问题1. 无法使用root用户登陆。2. SSH登录提示”connect to hosts xxxx :Connection refused功能概述 SSH 为 Secure Shell 的缩写,由 IET…

手把手搞定VMware 的CentOS硬盘扩容

1.背景 用VMware虚拟机创建Centos系统时&#xff0c;选了40GB硬盘&#xff0c;用着用着发现硬盘不够用了。于是&#xff0c;我为了给硬盘扩容&#xff0c;实操了下centos的硬盘扩容。本文是记录下整个操作过程&#xff0c;方便后面查询和使用。 2.操作 2.1 VMware操作 2.2 Ce…

Goweb---Gorm操作数据库(二)

Gorm允许用户自己自定义钩子操作&#xff0c;使用这些钩子操作&#xff0c;可以在增删改查操作前进行相关的操作和检验&#xff0c;它会在创建、更新、查询、删除时自动被调用。如果任何回调返回错误&#xff0c;GORM 将停止后续的操作并回滚事务。 自定义钩子函数 package ma…

充电宝哪个牌子性价比高?2024年充电宝推荐!7款好用充电宝推荐

近年来&#xff0c;充电宝爆炸、自燃等安全事故屡见不鲜&#xff0c;给人们的生命财产安全带来了严重的威胁。比如 2023 年 1 月&#xff0c;广西桂平的一自建民房凌晨突发大火&#xff0c;经初步调查&#xff0c;起火原因就是充电宝发生短路。2024 年 2 月 19 日晚&#xff0c…

如何在项目申报中实施精细化管理?

项目申报作为企业获取资源、拓展市场、推动创新的关键环节&#xff0c;其成功与否往往直接关系到企业的战略发展。而要在众多申报者中脱颖而出&#xff0c;实现项目申报的成功&#xff0c;精细化管理成为关键因素之一。精细化管理强调的是对项目申报全过程的每一个细节进行精准…

2024 年 8 月公链行业研报:Layer 1、比特币 Layer 2 和以太坊 Layer 2 趋势分析

作者&#xff1a;Stella L (stellafootprint.network) 数据来源&#xff1a;Footprint Analytics 公链研究页面 8 月&#xff0c;加密货币市场波动剧烈&#xff0c;比特币和以太坊均遭遇了明显下跌。Layer 1 区块链普遍遭受市场颓势&#xff0c;然而&#xff0c;Tron 却逆势…

开源链动 2+1 模式 S2B2C 商城小程序助力品牌实现先营后销与品效合一

摘要&#xff1a;本文探讨了在当今市场环境下&#xff0c;如何做到先营后销、品效合一。通过研究社区用户喜好&#xff0c;打造适合家庭消费的商品&#xff0c;并结合开源链动 21 模式 S2B2C 商城小程序&#xff0c;实现品牌的精准定位、创新包装以及小规格产品供应&#xff0c…

单片机——ADC采样

1、什么是ADC采样&#xff1f; ADC是指将模拟信号转换成数字信号的过程。通俗理解ADC采样就是采集电路中的电压&#xff0c;通过数值的方式表现出来。以STM32F103系列为例&#xff0c;它可以反应0~4095&#xff0c;换句话说&#xff0c;它采集的电压数值上表现为0~4095&#xf…