为什么在没有“self”且没有装饰器的情况下声明 Python 类的方法不会引发异常?

2024-01-09

我认为以下代码会导致错误,因为据我所知,Python 类中的方法必须将“self”(或任何其他标签,但按照约定为“self”)作为其第一个参数,或者“cls”或类似的如果@classmethod使用装饰器,或者不使用装饰器@staticmethod使用装饰器。

为什么我在终端中使用 Python 3.5 运行它时没有出现错误,即使test_method不满足这些要求?作为静态方法,它似乎工作得很好,但没有装饰器。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys

class MyClass:

    def test_method(args):
        print(args[1])

    @staticmethod
    def static_method():
        print("static_method")

    @classmethod
    def class_method(cls):
        print("class_method")


def main(args):
    MyClass.test_method(args)


if __name__ == '__main__':
    sys.exit(main(sys.argv))

Output:

$ python3 testscript.py "testing"
$ testing

EDIT:

我的问题也可以用不同的措辞来转移注意力self and to @staticmethod:“为什么我在没有 @staticmethod 装饰器的情况下得到了一个看似有效的静态方法?”


在Python 2中,类体中定义的函数会自动转换为“未绑定方法”,并且如果没有staticmethod装饰器则无法直接调用。在Python 3中,这个概念被删除了;MyClass.text_method是一个简单的函数,位于 MyClass 命名空间内,可以直接调用。

仍然使用的主要原因staticmethod在 Python 3 中,如果您还想在某个对象上调用该方法instance。如果不使用装饰器,该方法将始终将实例作为第一个参数传递,从而导致 TypeError。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在没有“self”且没有装饰器的情况下声明 Python 类的方法不会引发异常? 的相关文章

  • 检测到通过 ChromeDriver 启动的 Chrome 浏览器

    我正在尝试在 python 中使用 selenium chromedriver 来访问 www mouser co uk 网站 然而 从第一次拍摄开始 它就被检测为机器人 有人对此有解释吗 此后我使用的代码 options Options
  • 如何在 Jupyter Notebook 中运行 Python 异步代码?

    我有一些 asyncio 代码在 Python 解释器 CPython 3 6 2 中运行良好 我现在想在具有 IPython 内核的 Jupyter 笔记本中运行它 我可以运行它 import asyncio asyncio get ev
  • 使用 Python 创建 MIDI

    本质上 我正在尝试从头开始创建 MIDI 并将它们放到网上 我对不同的语言持开放态度 但更喜欢使用Python 两种语言之一 如果这有什么区别的话 并且想知道我应该使用哪个库 提前致谢 看起来这就是您正在寻找的 适用于 Python 的简单
  • Python 是解释型的还是编译型的,或者两者兼而有之?

    据我了解 An 解释的语言是由解释器 将高级语言转换为机器代码然后执行的程序 实时运行和执行的高级语言 它一次处理一点程序 A compiled语言是一种高级语言 其代码首先由编译器 将高级语言转换为机器代码的程序 转换为机器代码 然后由执
  • Python 使用 Gstreamer 访问 USB 麦克风时遇到问题,以便在 Raspberry Pi 上使用 Pocketsphinx 执行语音识别

    所以Python的表现就好像它根本听不到我的麦克风发出的任何声音 问题就在这里 我有一个Python 2 7 假设使用的脚本Gstreamer通过以下方式访问我的麦克风并为我进行语音识别口袋狮身人面像 我在用着脉冲音频我的设备是树莓派 我的
  • Python tkinter.filedialog Askfolder 干扰 clr

    我主要在 Spyder 中工作 构建需要弹出文件夹或文件浏览窗口的脚本 下面的代码在spyder中完美运行 在 Pycharm 中 askopenfilename工作良好 同时askdirectory什么都不做 卡住了 但是 如果在调试模式
  • 如何使用 javascript/jquery/AJAX 调用 Django REST API?

    我想使用 Javascript jQuery AJAX 在前端调用 Django Rest API 请求方法是 POST 但当我看到 API 调用它的调用 OPTIONS 方法时 所以 我开始了解access control allow o
  • 对使用 importlib.util 导入的对象进行酸洗

    我在使用Python的pickle时遇到了一个问题 我需要通过将文件路径提供给 importlib util 来加载一些 Python 模块 如下所示 import importlib util spec importlib util sp
  • 如何在 Django 中使用基于类的视图创建注册视图?

    当我开始使用 Django 时 我几乎使用 FBV 基于函数的视图 来处理所有事情 包括注册新用户 但当我更深入地研究项目时 我意识到基于类的视图通常更适合大型项目 因为它们更干净且可维护 但这并不是说 FBV 不是 无论如何 我将整个项目
  • Python Django-如何从输入文件标签读取文件?

    我不想将文件保存在我的服务器上 我只想在下一页中读取并打印该文件 现在我有这个 index html
  • 迭代列表的奇怪速度差异

    我创建了两个重复两个不同值的长列表 在第一个列表中 值交替出现 在第二个列表中 一个值出现在另一个值之前 a1 object object 10 6 a2 a1 2 a1 1 2 然后我迭代它们 不对它们执行任何操作 for in a1 p
  • Pandas 堆积条形图中元素的排序

    我正在尝试绘制有关某个地区 5 个地区的家庭在特定行业赚取的收入比例的信息 我使用 groupby 按地区对数据框中的信息进行排序 df df orig groupby District Portion of income value co
  • GradientTape 根据损失函数是否被 tf.function 修饰给出不同的梯度

    我发现计算的梯度取决于 tf function 装饰器的相互作用 如下所示 首先 我为二元分类创建一些合成数据 tf random set seed 42 np random seed 42 x tf random normal 2 1 y
  • 使用 Conda 更新特定模块会删除大量软件包

    我最近开始使用 Anaconda Python 发行版 因为它提供了许多开箱即用的数据分析库 使用 conda 创建环境和安装软件包也轻而易举 但是当我想更新 Python 本身或任何其他模块时 我遇到了一些严重的问题 我事先被告知我的很多
  • 为什么我应该使用 WSGI?

    使用 mod python 一段时间了 我读了越来越多关于 WSGI 有多好的文章 但没有真正理解为什么 那么我为什么要切换到它呢 有什么好处 这很难吗 学习曲线值得吗 为了用 Python 开发复杂的 Web 应用程序 您可能会使用更全面
  • Flask 应用程序的测试覆盖率不起作用

    您好 想在终端的 Flask 应用程序中测试 删除路由 我可以看到测试已经过去 它说 test user delete test app LayoutTestCase ok 但是当我打开封面时 它仍然是红色的 这意味着没有覆盖它 请有人向我
  • Python对象初始化性能

    我只是做了一些快速的性能测试 我注意到一般情况下初始化列表比显式初始化列表慢大约四到六倍 这些可能是错误的术语 我不确定这里的行话 例如 gt gt gt import timeit gt gt gt print timeit timeit
  • 附加两个具有相同列、不同顺序的数据框

    我有两个熊猫数据框 noclickDF DataFrame 0 123 321 0 1543 432 columns click id location clickDF DataFrame 1 123 421 1 1543 436 colu
  • [cocos2d-x]当我尝试在 Windows 10 中运行“python android-build.py -p 19 cpp-tests”时出现错误

    当我尝试运行命令时python android build p cpp tests 我收到如图所示的错误 在此之前 我收到了另一条关于 Android SDK Tools 版本兼容性的错误消息 所以 我只是将 sdk 版本从 26 0 0
  • python 中的 after() 与 update()

    我是 python 新手 开始使用 tkinter 作为画布 到目前为止 我使用 update 来更新我的画布 但还有一个 after 方法 谁能给我解释一下这个函数 请举个例子 两者之间有什么区别 root after integer c

随机推荐

  • 如何在 ng-repeat (AngularJS) 中绑定多个 JSON 文件?

    我有多个 JSON 文件 主要 json MainRegister name Name1 url url1 json name Name2 url url2 json url1 json SubInformation description
  • 使用 scipy.spatial 的数据类型问题

    我想使用 scipy spatial 的 KDTree 来查找二维数组中的最近邻对 本质上是一个列表列表 其中嵌套列表的维度为 2 我生成列表列表 将其通过管道传输到 numpy 的数组中 然后创建 KDTree 实例 然而 每当我尝试对其
  • 使用 Mockito 模拟 Jersey 客户端

    您好 我正在使用 JUnit 和 Mockito 测试 Jersey Client 1 19 版本 我正在努力获取或阅读该实体 我不知道如何从那里继续 而且我也收到 IllegalStateException 下面是我用来为客户端响应创建模
  • 如何在AWS上自动部署带有子模块的git存储库?

    我的 git 存储库中有一个子模块 我的目录结构如下 app folder1 folder2 submodule 5855 我已使用自动部署服务在 AWS 上部署了我的代码 现在 在服务器上 我的父目录中有代码 但子模块目录为空 Q1 如何
  • 量角器 - 查找所有元素和找到的元素的循环长度,然后单击按钮

    所以我一直在试图弄清楚如何根据 find All 元素的数量来单击按钮 x 次 这意味着如果同一个类名找到 3 个元素 那么我们循环 3 次 这应该单击按钮 3 次 我做了这样的事情 新更新 请查看底部的编辑帖子 通常情况下element
  • StrictMode java.lang.Throwable:检测到未标记的套接字

    启用 StrictMode 后 我刚刚开始收到此异常 java lang Throwable 检测到未标记的套接字 使用 TrafficStats setThreadSocketTag 跟踪所有网络使用情况 有几种方法可以处理此异常 首先
  • 使用细粒度锁的代码示例(JCR Jackrabbit?)

    我正在进行一项学术研究 试图开发一种编程工具 帮助实现细粒度锁定功能 用于维护树状数据结构的并发程序 例如 程序员可能会编写一些接收树根节点并修改树的函数 通过遍历某些路径并添加 删除节点 该工具将帮助他找到代码中节点应该被锁定的位置 以及
  • PDO-bindParam 不起作用

    我正在创建一个 PDO 类以在我的项目中使用 但由于我是新手 所以我无法将参数绑定到准备好的 sql 语句 而不会出现任何错误 这是执行此操作的函数 bindParam public static function bind get fun
  • java.net.URI.relativize 不适用于 JAR URI

    我有两个 URI 对象 一个指向 JAR 文件中的文件夹 另一个指向同一 JAR 文件中的文件 该文件位于第一个 URI 指定的目录的子文件夹中 我喜欢创建一个相对 URI 因此生成的 URI 仅包含 JAR 中文件的相对路径 文件夹URI
  • IIS 上的 Python:如何?

    我有 PHP dotNet 背景 并且对 Python 着迷 我想逐步将功能从 PHP 转置为 Python 并排运行各个部分 由于应用程序规模庞大 这一过渡可能需要 2 年时间 因此我必须使用 IIS 我有 15 年的 Web 编程背景
  • 使用 AFIncrementalStore 和 NSFetchedResultsController 出现死锁

    这几天我一直在苦苦思索这个问题 但我一生都无法弄清楚到底发生了什么 我对核心数据很陌生 但我对它足够了解 可以避免死锁情况 然而 对于这个项目 我决定尝试合并 AFIncrementalStore 我构建了一个示例项目来测试 APIClie
  • 使用 flex 将 Python 多行字符串与转义字符匹配

    我想知道如何将 python 多行注释与 flex 相匹配 我遇到了一些麻烦 以下工作正常Regexr https regexr com 但不被flex识别 我不知道如何修复它 1 2 以前 我使用过 3 0 2 3 它可以检测以下评论 A
  • Python dryscrape 抓取带有 cookies 的页面

    我想从网站获取一些数据 这需要登录 我通过以下方式登录requests url http example com response requests get url email email protected cdn cgi l email
  • 从 github 项目分发二进制文件的最佳实践是什么? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 从 github 项目分发二进制文件的最佳实践是什么 我能想到 在项目中创建一个 bin 文件夹 在其中保存二进制文件的副本 但是 github 旨在
  • iPhone 内存压力导致 iOS 钥匙串数据丢失?

    我正在 iPhone 5s 上通过调试器运行 iOS 应用程序 我使用钥匙串来存储密码 我使用 Apple 的 KeychainItemWrapper 示例来存储和检索我的钥匙串项目 大约 99 99 的情况下 钥匙串检索都能完美运行 但是
  • AWS Terraform:通过匹配标签名称中的子字符串来过滤特定子网

    我有 6 个子网 我想从中过滤 3 个匹配子字符串的子网internal并在 rds 中使用 标签名称具有内部单词 并且希望根据该内部单词进行过滤 有人可以帮我吗 data aws vpc vpc nonprod sctransportat
  • 使用 jQuery .appendTo 后执行 CSS3 动画

    我想用 appendTo 修改元素的 DOM 位置 完成后 我需要使用 CSS3 为元素设置动画 该元素不会产生动画 而是捕捉到新的 CSS 样式 JavaScript run click function imageOriginal ap
  • xcode 构建错误:项目不包含方案

    我正在开发一个离子应用程序 但是当我尝试构建它时 它给了我以下错误 xcodebuild error The project named SnapHome does not contain a scheme named SnapHome T
  • 每个 CPU 的线程实际限制是多少?

    我一直在玩弄线程 试图将一些限制推向极致 为了我自己的娱乐 我知道线程池默认为 25 个线程 并且可以增加到 1000 个 根据 MSDN 但是 每个 CPU 核心的线程数的实际限制是什么呢 在某些时候 上下文切换会比线程保存造成更多的瓶颈
  • 为什么在没有“self”且没有装饰器的情况下声明 Python 类的方法不会引发异常?

    我认为以下代码会导致错误 因为据我所知 Python 类中的方法必须将 self 或任何其他标签 但按照约定为 self 作为其第一个参数 或者 cls 或类似的如果 classmethod使用装饰器 或者不使用装饰器 staticmeth