如何在 Python 3 的方法装饰器中调用 super ? [复制]

2023-12-11

我该如何填写????

def ensure_finished(iterator):
    try:
        next(iterator)
    except StopIteration:
        return
    else:
        raise RuntimeError


def derived_generator(method):
    def new_method(self, *args, **kwargs):
        x = method(self, *args, **kwargs)
        y = getattr(super(???, self), method.__name__)\
            (*args, **kwargs)

        for a, b in zip(x, y):
            assert a is None and b is None
            yield

        ensure_finished(x)
        ensure_finished(y)

    return new_method

EDIT :由于评论中提到的原因,这不起作用。我将把它留在这里,以便下一个尝试回答的人不会做同样的事情(直到真正的答案出现)。

你应该使用type(self)

Example我简化了你的代码,但本质应该仍然在那里

def derived_generator(method):
    def new_method(self, *args, **kwargs):
        x = method(self, *args, **kwargs)
        y = getattr(super(type(self), self), method.__name__)\
            (*args, **kwargs)

        for a, b in zip(y, x):
            yield a, b

    return new_method

class BaseClass(object):
    def iterator(self):
        return [1, 2, 3]

class ChildClass(BaseClass):
    @derived_generator
    def iterator(self):
        return [4, 5, 6]

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

如何在 Python 3 的方法装饰器中调用 super ? [复制] 的相关文章

随机推荐

  • Django ImageField“上传有效的图像。您上传的文件要么不是图像,要么是损坏的图像。”

    我安装了 PIL 但是每当我尝试通过模型的 Django 管理将 png 文件上传到图像字段时 都会收到此错误 上传有效的图像 您上传的文件要么不是图像 要么是损坏的图像 其他图像类型工作正常 我尝试过几个不同的 PNG 文件 我在安装 p
  • PHPExcel 返回损坏的二进制文件

    I want to write a reference xls file and retrieve the result When I tested with a single file it works but when the refe
  • IPC的实现方式

    在 Windows 上实现 IPC 的首选方法是什么 我知道几个类似的 命名管道 共享内存 信号量 也许是COM 虽然我不知道如何 我想知道什么被认为是最强大 最快速 最不容易出错并且易于维护 理解的 几年前 我们针对客户端 服务器情况研究
  • 使用sql语句insert into将blob文件写入数据库

    我目前正在 Advantage Database Server 中寻找通过 sql 将字节流 所谓的 blob 文件 放入表中的可能性 当我建立一个完整的数据库时 我会这样做 TBlobField BaseTable FieldByName
  • 如何获取 HTML Canvas 中旧生成元素的引用?

    看一下这个例子 var c document getElementById myCanvas var ctx c getContext 2d First rectangle created ctx fillRect 20 20 150 10
  • python panda:返回公共行的索引

    抱歉 如果这是一个相当新手的问题 我试图找出两个数据框之间哪些行是共同的 返回值应该是行索引df2常见于df1 我的笨重例子 df1 pd DataFrame col1 cx cx cx2 col2 1 4 12 df1 col2 df1
  • java中具有多个客户端的Socket服务器

    我必须创建一个套接字服务器来监听多个客户端 假设有6个客户端同时连接到服务器 并且每个客户端同时向服务器发送一些命令 如果这些客户端每 1 秒向服务器发送一次消息 我如何处理来自服务器端 6 个客户端的这些消息 将其存储在表中以及对每个客户
  • 如何在 Angular 的反应表单中设置表单控件的值

    我是角度新手 实际上 我正在尝试从服务订阅数据 并将该数据传递给我的表单控件 例如 它就像编辑表单 import Component OnInit from angular core import FormBuilder FormGroup
  • 在 ios 应用程序中获取某人的 Facebook 公开资料

    我正在开发一个需要 Facebook 登录的 ios 应用程序 我已经成功实现了登录过程 但现在我无法找到如何以及在哪里可以获得用户的个人资料信息 如名字 姓氏 个人资料图片等 我的应用程序有权访问名字 姓氏 个人资料图片和电子邮件 以下是
  • Jupyter-Lite 模块/包/库安装

    如何在 Jupyter Lite 中添加更多模块 我尝试了大多数变化 Jupyter Lite 是否在我的机器上使用 python 库 我希望浏览器中的 Jupyterlite 使用本地安装的 python 库 例如在 Jupyter la
  • 如何在 Clojure 中向数组映射添加元素?

    如何在 Clojure 中向数组映射添加元素 我尝试使用 assoc 但它没有被添加 我本质上想为条目数组映射中任何缺失的项目设置默认值 0 defn create entry doc let entry assoc doc id str
  • 结构数组 - 初始化错误

    我在这里创建一些数据结构 使用 MFC 在 MS Visual C 6 0 中编译 是的 它很旧 struct SOpcodeData BYTE m byDataType DWORD m dwMinValue DWORD m dwMaxVa
  • 如何删除数据框中同时出现在两列中相同的行?

    我有一个数据框 DF1 Id1 Id2 0 286 409 1 286 257 2 409 286 3 257 183 在这个 DF 中 对我来说行286 409 and 409 286是一样的 我只想保留其中一行 我所做的所有这一切都是使
  • 事件处理程序是否会阻止垃圾收集的发生?

    如果我有以下代码 MyClass pClass new MyClass pClass MyEvent MyFunction pClass null pClass 会被垃圾回收吗 或者它会在事件发生时继续触发事件吗 我需要执行以下操作才能允许
  • 存储访问框架,takePersistableUriPermission

    在我的应用程序中 用户可以选择下载目录 如果他选择外部可拆卸SD 卡 不是模拟的 SD 卡 而是内存 例如真正的物理 microSD 卡 从 Android 4 4 开始我只能使用以下命令对其进行写入SAF 存储访问框架 我已经弄清楚如何使
  • 同一模型中的 has_many 和 Belongs_to

    我有一个模型用户 它有一个 角色 属性 可以填充 员工 或 经理 现在我想要一种关系 其中经理拥有 许多员工 而员工属于 经理 是否可以在同一模型中执行此操作 我可以想到这样的事情 has many employees class name
  • 按顺序进行控制

    我正在使用表单的文本字段创建一个 XML 文件 当我使用For Each loop For each Ctrl in Me Controls dosomething Next 它不按顺序排列它们 也就是说 它首先需要TextBox在中间 然
  • MySQL:选择查询执行和结果获取时间随着连接数量的增加而增加

    我的服务器应用程序通过单独的线程与 MySQL 建立多个连接 每个连接都会触发一个SELECT查询并获取结果 然后应用程序将其返回给其连接的用户 我正在使用InnoDB 令我惊讶的是 我发现很奇怪的是 如果我增加 MySQL 的连接数量 查
  • 取消选择后无法再次选择选项

    我有一个输入 id quickS 和一个选择 id lbSLI L 元素 如下所示 我的 Jquery 代码如下 document ready function quickS keyup function lbSLI L option se
  • 如何在 Python 3 的方法装饰器中调用 super ? [复制]

    这个问题在这里已经有答案了 我该如何填写 def ensure finished iterator try next iterator except StopIteration return else raise RuntimeError