静态方法的目的是什么?我如何知道何时使用? [复制]

2023-12-04

我使用以下代码在 python 中遇到了未绑定方法错误:

import random

class Sample(object):
    def drawSample(samplesize, List):
        sample = random.sample(List, samplesize)
        return sample

Choices=range(100)
print(Sample.drawSample(5, Choices))

我能够通过添加来解决问题@staticmethod到方法。不过,我实在不太了解情况。

使用“静态”方法有什么意义?为什么它可以解决这段代码中的问题,为什么它们是必要的?相反,我为什么要not想要这样做(即为什么需要额外的代码来使方法静态)?


See 本文详细解释。

TL;DR

1.它消除了使用self争论。

2.它减少了内存使用,因为Python不必实例化绑定方法对于每个实例化的对象:

>>>RandomClass().regular_method is RandomClass().regular_method
False
>>>RandomClass().static_method is RandomClass().static_method
True
>>>RandomClass.static_method is RandomClass().static_method
True

3.提高了代码的可读性,意味着该方法不依赖于对象本身的状态。

4.它允许方法重写,因为如果该方法是在模块级别(即类外部)定义的,则子类将无法重写该方法。

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

静态方法的目的是什么?我如何知道何时使用? [复制] 的相关文章

随机推荐

  • 在 oracle 中连接时对字符串进行排序

    我正在使用collect 函数来连接sql 查询的字符串 select id tab to string CAST COLLECT a level d Number to char nvl de eventDate SYSDATE 365
  • 如何在 Rails 中设置默认值?

    我正在尝试找到为 Rails 中的对象设置默认值的最佳方法 我能想到的最好的方法是在new控制器中的方法 如果这是可以接受的或者是否有更好的方法 是否有人有任何意见 正确 在 Ruby 中是一个危险的词 做任何事情通常有不止一种方法 如果你
  • 如何使用合并分支对 TFS 拉取请求中的 Jenkins 作业进行排队

    我们在 TFS 2017 3 中有一个 Git 存储库 我们的构建在 Jenkins 上运行 我们希望在拉取请求中实现构建验证 因此我们创建了一个构建定义 该定义对 Jenkins 作业进行排队 并在 作业参数 中输入BRANCH Syst
  • 为数组中的每两个元素创建对

    如何简洁地编写一个函数 以便它使用数组中的每对元素创建一个新的对象数组 假设元素数量为偶数 输入示例 input 1 42 55 20 3 21 Output output x 1 y 42 x 55 y 20 x 3 y 21 Edit
  • 单页根据当前位置隐藏/显示部分

    我正在开发单页网站 每个页面都组织成部分标签 每个部分都放置在彼此的顶部 我需要一种使用 jquery 的方法 根据当前位置 DOM 将隐藏其余部分 例如 按下 关于 链接将带您进入 关于 部分 我当前的 DOM 结构
  • 从标记模板文字函数参数推断类型

    我想从标记模板文字函数中的通用参数获取类型 但打字稿无法从参数 模板 中读取 它只是将类型读取为 TemplateStringsArray const tag
  • 函数中的 dplyr 管道

    我试图将 dplyr 管道放入函数中 但在多次阅读小插图以及整洁的评估之后 https tidyeval tidyverse org dplyr html 我仍然无法让它工作 Sample data dat lt read table te
  • SQL Server 无法对包含聚合或子查询的表达式执行聚合函数

    我的存储过程有问题 我收到错误 无法对包含以下内容的表达式执行聚合函数 聚合或子查询 这是我的存储过程中我认为发生错误的部分 SELECT column 1 column 2 SUM CASE WHEN column 2 NOT IN SE
  • 在 Erlang 中显示连接特定的 cookie

    当在节点上设置 cookie 时erlang set cookie 2可以为不同的节点设置不同的cookie 有什么方法可以显示哪个节点设置了哪个cookie Calling erlang get cookie 1不显示此信息 仅显示 默认
  • 将 JPanel 添加到 JScrollPane

    我正在尝试显示多个较小的JPanel on a JScrollPane 为了实现这一目标 我目前将它们添加到另一个JPanel并将此面板设置为scrollPane的ViewportView 有没有办法将面板直接添加到滚动窗格 不起作用的是
  • 如何在 Windows 中将套接字设置为阻塞模式?

    我正在做一些相当简单的跨平台 TCP 套接字编程 不幸的是 我发现在 Windows 上编译时 我的套接字默认是非阻塞的 而在 OS X 上它们默认是阻塞的 如何在 Windows 上强制套接字进入阻塞模式 它们通常默认为非阻塞模式还是有什
  • php数组唯一类型检查

    我在用array unique删除数组中的重复值 但是 问题是array unique检查重复项时不考虑数据类型 例如 a 1 true null false u array unique a var dump u Outputs arra
  • 按进程获取电池使用情况

    我有一个代码 在 C 中 用于管理在我的计算机中启动的所有进程 我用性能计数器用于查找在一个特定进程中链接的所有值的类 例如 此代码检索了 Firefox 的处理器时间使用情况 PerformanceCounter processorTim
  • 如何使用 BeautifulSoup 删除嵌套标签中的内容?

    如何删除嵌套标签中的内容BeautifulSoup 这些帖子显示了相反的情况来检索嵌套标签中的内容 如何使用 BeautifulSoup 获取嵌套标签的内容 and BeautifulSoup 如何从包含一些嵌套 的 列表中提取所有 我努力
  • 合并字典而不覆盖值

    这似乎是一个简单的任务 我正在尝试合并两个字典而不覆盖值但附加 a 1 1 1 2 2 2 3 3 3 4 4 b 3 5 5 4 6 6 元组数量 a 4 元组数量 b 2 这就是为什么我单独列出这些选项 因为它们会覆盖 all dict
  • 当隔离级别为 READ_UNCOMMITTED 时,无法看到正在运行的事务插入的行

    我有将行插入表的应用程序A同时 每个应用程序以批处理模式插入行 使用 JDBC 准备好的语句 每批使用一个事务 以避免在每次插入后重建索引 INSERT 每个批次中存在的行是完全独立的 事务仅用于优化 每个插入的行都会自动设置其主键 AUT
  • 以图像为背景的热图

    我正在尝试使用 R 制作热图 我正在尝试使用 ggplot2 我的实际数据框要大得多 但在这里我只包含一小部分 x lt c 502 9 512 1 716 6 759 7 776 1 776 5 736 1 271 3 304 7 279
  • 在NDK中使用资源文件

    我正在创建一个 NDK 库 它需要包含和访问二进制数据文件 dat 扩展名 我无法让已编译的库查看此文件 为了让事情变得更加困难 我在库包中执行此操作 我认为如果在我的 Android mk 文件期间 将此 dat 文件复制到我的应用程序的
  • 如何在ASP.NET中获取提示值?

    我想要做的是 当用户在提示框中输入文本并按下 确定 按钮时 提示框会将值发送回string prmt 如果他们取消了提示 则不会执行任何操作 Codes string prmt if ren gt 1 ClientScript Regist
  • 静态方法的目的是什么?我如何知道何时使用? [复制]

    这个问题在这里已经有答案了 我使用以下代码在 python 中遇到了未绑定方法错误 import random class Sample object def drawSample samplesize List sample random