带参数和不带参数的 super() 有什么区别?

2024-04-28

我遇到了一个使用的代码super()方法有两种不同的方式,我不明白逻辑上有什么区别。

我现在正在学习pygame模块,我有一个任务来创建一个类Ball它继承自Sprite这是一个来自pygame模块(如果我没记错的话)。

我遇到了这段代码:

import pygame

class Ball(pygame.sprite.Sprite):

    def __init__(self, x, y):
        super(Ball, self).__init__()

我无法理解以下内容的区别:

import pygame

class Ball(pygame.sprite.Sprite):

    def __init__(self, x, y):
        super().__init__()

(论证super() method)

这些代码块在逻辑上有什么区别?为什么我需要传递到super()方法参数?这些论点需要是什么?


在 Python-3.x 中,您通常不需要参数super不再了。那是因为它们被神奇地插入了(参见PEP 3135 -- 新超级 https://www.python.org/dev/peps/pep-3135/).

有参数调用和无参数调用是相同的if:

  • 第一个参数是定义该方法的类,该方法使用super。在你的情况下是Ball所以条件满足。
  • 和第二个参数super is the first该方法的参数。在你的情况下是self这是该方法的第一个参数,因此也满足条件。

所以在你的情况下有没有不同两个例子之间!


然而,在极少数情况下,您实际上需要致电super具有不同的参数(具有 1 或 2 个参数/-s)。 super 的文档是一个很好的起点:

>>> help(super)
Help on class super in module builtins:

class super(object)
 |  super() -> same as super(__class__, <first argument>)
 |  super(type) -> unbound super object
 |  super(type, obj) -> bound super object; requires isinstance(obj, type)
 |  super(type, type2) -> bound super object; requires issubclass(type2, type)
 |  Typical use to call a cooperative superclass method:

但我认为你的问题主要是关于你的例子中的差异(没有差异)和这些super需要参数的调用是很稀少这是一个相当高级的主题,所以我将把它们排除在这个答案之外。

但是,如果您对差异感兴趣,那么一些资源可能会有所帮助:

  • 在 Python 3 中调用 super() 的 4 种方法中,使用哪一种? https://stackoverflow.com/q/2771904/5393381
  • 如何在 python 中使用带有一个参数的 super() https://stackoverflow.com/q/30190185/5393381
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带参数和不带参数的 super() 有什么区别? 的相关文章

随机推荐

  • 在正确的时机批量创建视频 .srt 字幕

    好家伙 我什至不知道从什么开始 所以 我有一个包含很多视频的文件夹 我需要的是使用这些视频的名称创建字幕 同时注意其长度以创建 srt 格式的字幕 我已经查找了一些信息并复制了一些代码 echo off set dirpath 1 dir
  • 谷歌可视化将 0 轴与两个不同的 y 轴对齐

    我正在创建一个组合图 https developers google com chart interactive docs gallery combochart与谷歌的可视化库 我正在绘制商店一天内的客流量和收入图表 我已将抽奖选项设置为
  • 我可以在 .NET 2.0 或 3.0 中使用扩展方法和 LINQ 吗?

    当我尝试使用 NET 2 0 或 3 0 运行时添加扩展方法时 出现错误 无法定义新的扩展方法 因为编译器需要 类型 System Runtime CompilerServices ExtensionAttribute 不能 成立 您是否缺
  • 用于滚动文本的CSS文本动画[重复]

    这个问题在这里已经有答案了 我想我已经完成了一半 但我需要一些 CSS3 或 jQuery 帮助来完成这个滚动文本 我有一个 div 我需要文本从左向右滚动 然后当点击 div 末尾时再次从右向左滚动 依此类推 我目前从左到右 但它似乎在
  • 如何在 Android 中使用 Gson 和 Retrofit 解析深层嵌套 json 对象中的字段?

    我有一个独特的情况 我必须从 json 的深层嵌套对象中获取某些时间 这有点复杂 我找不到解决方案 所以寻找解决这个问题的想法和方法 我有一个 json 如下 mySpaceId 73220 myBuildingId 14019 myFlo
  • 为什么没有值的变量返回 true 且为空?当在视图中使用时)?

    The empty 方法对于 nil 类是未定义的 所以当你尝试时nil empty 在控制台中它给出 undefined method empty for nil NilClass 我在 application helper rb 中创建
  • CordovaApp.Windows.jsproj(70,3):错误 MSB4019:导入的项目

    完整错误日志 C Users user Development Tutorials cordova tutorial hello platforms windows CordovaApp Windows jsproj 70 3 error
  • 以 ng-repeat 角度随机播放数组

    我正在创建一个测验 每次开始测验时我都想打乱问题的顺序 这样它们就不会每次都以相同的顺序出现 我的 html 代码中有这样的内容 div div question question div img img class quizImg div
  • 在 MATLAB 中绘制圆

    我被要求找到在 MATLAB 中绘制圆的不同方法 看起来很无聊 不过我可以想出一些想法 有些可能效率低下 Method 1 ezpolar x 1 Method 2 t linspace 0 2 pi 100 plot sin t cos
  • iPhone X 的顶栏高度是多少?

    我想知道 iPhone X 顶栏的具体高度 您能否提及iPhone X的状态栏和导航栏高度 请帮我 然而 iPhone X 上的显示屏145pt比 4 7 英寸显示屏高 从而为内容提供大约 20 的额外垂直空间 欲了解更多信息 请获取 Ap
  • 使用 GridsearchCV () 进行保留验证

    GridsearchCV 有一个参数cv 默认值为3 表示是3倍 有没有办法将 Gridsearch 与保留验证方案一起使用 例如80 20 分割 你可以使用sklearn model selection ShuffleSplit or s
  • ESLint 错误:“@storybook/react”应该列在项目的依赖项中,而不是 devDependencies

    使用 ESLint 将 Storybook 安装到 React js 应用程序中后 VSCode linter 无法识别 storybook react示例中的导入 stories js files 它给了我以下错误 storybook r
  • Java 中是否有等效于 C++ 的析构函数? [复制]

    这个问题在这里已经有答案了 最简单的设计如下 class Session Timer t new Timer 每当 Session分配完毕后 我在其中启动一个计时器 计时器将在 10 20 分钟后到期 现在 假设如果Session在计时器到
  • C++ 强制转换为 void 的目的是什么? [复制]

    这个问题在这里已经有答案了 可能的重复 将未使用的返回值强制转换为 void https stackoverflow com questions 689677 casting unused return values to void 我读了
  • 如何恢复默认状态栏颜色?

    在我的一项活动中 我不希望状态栏有任何颜色 我希望它在我的应用程序运行之前保持为任何颜色 我可以将其更改为黑色 但黑色不是默认值 默认值是透明的 我不想尝试找出哪种透明度是正确的 因为它在其他人的手机上可能有所不同 所以我想在此特定活动中基
  • 查找字符串中只出现一次的字符

    我正在用 PHP 编写一个算法来解决给定的数独难题 我已经设置了一个带有两个类的面向对象的实现 Square9x9 棋盘上每个单独图块的类 以及Sudoku类 其矩阵为Squares 代表董事会 我正在使用的算法的实现是一种三层方法 第一步
  • var chat = $.connection.chat; 出现对象未定义错误使用 SignalR 时

    我尝试安装 SignalR 库来创建示例聊天应用程序 我相信我已遵循文档中给出的所有步骤 我不确定失败的原因是什么 创建聊天对象时失败 我正在使用 VS2010 并使用 VS2010 包下载实用程序下载 SignalR 有人对此有疑问吗 谢
  • jq:删除具有空字符串值的键

    我有以下 JSON data NAME Test 1 ID 1 IP 192 168 1 2 80 NAME Test 2 ID 2 IP NAME Test 3 ID 3 IP 192 168 1 3 80 NAME Test 4 ID
  • 使用简洁形式的 NSManagedObjectID URI?

    在我的应用程序中 我使用 Core Data 以及不使用 Core Data 的附加 sqlite 数据库 在这个附加数据库中 我有一些列存储对NSManagedObject实例通过每个实例的NSManagedObjectID 我得到一个实
  • 带参数和不带参数的 super() 有什么区别?

    我遇到了一个使用的代码super 方法有两种不同的方式 我不明白逻辑上有什么区别 我现在正在学习pygame模块 我有一个任务来创建一个类Ball它继承自Sprite这是一个来自pygame模块 如果我没记错的话 我遇到了这段代码 impo